GithubHelp home page GithubHelp logo

ptrckbnck / sqlchecker Goto Github PK

View Code? Open in Web Editor NEW
4.0 3.0 2.0 63.22 MB

SQLChecker hilft Studenten dabei Lösungen für die Aufgaben des Informatik Datenbanken Moduls der Goethe Universität FFM zu erstellen.

Java 99.24% CSS 0.34% Python 0.41%

sqlchecker's Introduction

SQLChecker

Ein wichtiger Bestandteil der Vorlesungungen zu Datenbanksystemen ist das Erlernen von SQL. Dazu müssen die Studierenden praxisorientierte Aufgaben bewältigen. Der SQLChecker ist ein handliches Werkzeug mit dem SQL-Aufgaben erstellt und von den Studierenden bearbeitet werden können. Der SQLChecker übernimmt zudem automatisiert die Auswertung der Abgaben der Studierenden. Der SQLChecker wurde bereits mehrfach im Kurs "Datenbanksysteme 1" und im Kurs "Programmierung von Datenbanken (PDB)" an der Goethe-Universität erfolgreich eingesetzt.

Installation

Der SQLChecker ist vollständig in Java 11 erstellt worden. Das Projekt ist nicht mit älteren Versionen von Java kompatibel. Aktuelle Java Versionen finden sich auf z.B. unter https://adoptium.net/de/ oder https://jdk.java.net/.

Um SQLChecker vollständig nutzen zu können, müssen Sie ein SQL-Datenbankverwaltungssysteme installieren. Empfohlen wird MariaDB Community Server sein. Sie können überprüfen, ob Ihr Datenbanksystem korrekt installiert ist und läuft, indem Sie mysql --version ausführen und ihr Root-Password eingeben. Für die Installation des gewählten Verwaltungssystem richten Sie sich bitte an dessen Anleitung.

Studierende sind in der Lage alle Aufgaben durch Verwendung des SQLCheckers lösen. Da dieser allerdings nur über eine eingeschränkte grafische Oberfläche verfügt, empfiehlt es sich zusätzlich einen Datenbank-Clienten zu installieren, um einfacher SQL-Statements zu testen. Workbench und HeidiSQL sind zwei gängige Programme.

Laden Sie abschließend das aktuelle Build des SQLCheckers herunter. Dieses Jar-File führen Sie mit Java im Terminal aus:

java -jar sqlchecker-<Versionsnummer>.jar

Achten Sie darauf die korrekte Version von Java (mindestens 11) zu nutzen. Sie können die Version von Java mit java --version überprüfen. Haben Sie mehrere Versionen von Java installiert, können sie statt java den expliziten Pfad zur richtigen Java-Installation angeben.

Möchten Sie SQLChecker per Doppelklick starten, müssen Sie die Datei ggf. noch ausführbar machen. Auf den meißten Linux Systemen können sie dies mit folgendem Befehl:

sudo chmod +x sqlchecker-<Versionsnummer>.jar

Verwendung

Diese Anleitung richtet sich an Studierende, welche den SQL-Checker zur Bearbeitung der Aufgaben nutzen wollen. An Übungsleitende und andere Interessierte zur Erstellung von Aufgaben richtet sich diese Anleitung (nicht aktuell).

Nachdem Sie java -jar sqlchecker-<Versionsnummer>.jar ausgeführt haben erscheint die GUI des SQLCheckers.

SQLChecker konfigurieren

Der erste Schritt sollte stets sein, die Einstellung anzupassen. Dazu klicken Sie auf den Reiter Einstellung. Dort gibt es zwei Einträge, Datenbank und Student. Unter Datenbank setzen Sie alle Informationen, die Sie für eine Datenbankverbindung brauchen.

Sie sollen für die Benutzung der Datenbank durch den SQLChecker einen eigenen Nutzer anlegen und es vermeiden den root Nutzer zu verwenden.

Alle Felder außer dem Reset Skript sind Pflichtfelder. Lassen sie dieses Feld zunächst frei.

Unter dem Eintrag Student legen Sie die Informationen fest, die Sie brauchen um Ihre Abgabe einzureichen. Bitte füllen sie jedes Feld aus und falls Sie mit eine*r Partner*In arbeiten, auch die Felder Ihre*r Partner*In. Abgaben ohne diese Einträge werden nicht bewertet.

Ein Projekt bearbeiten

Unter einem Projekt versteht sich die Bearbeitung eines Aufgabenblatts. Jedes Aufgabenblatt kommt mit zwei Dateien. Einem SQL-Checker-Template (*.sqlt) und einem SQL-Skript (*.sql).

Um ein neues Projekt anzulegen, klicken sie auf Datei Neu. Zunächst wählen sie die Template-Datei ihres Aufgabenblattes aus. Das Template definiert die Aufgabenstellung. Als nächstes geben Sie den Ort an, wo sie Ihr Projekt speichern wollen.

Nachdem sie erfolgreich ein Projekt angelegt haben, sehen Sie auf der linken Seite des Reiters Übung eine Liste der Aufgaben.

Nun legen Sie das Reset Skript fest, dass Sie zuvor übersprungen haben. Dazu gehen sie wieder zu Einstellung Datenbank und wählen sie den Pfad zum zur Übung mitgeliefertem SQL-Skript. Das Skript hat die Aufgabe, die nötigen Datenbank-Einträge für die Bearbeitung der Aufgabenstellung zu erzeugen und die Datenbank nach belieben in diesen Zustand zurückzuversetzen zu können.

Jetzt können Sie die Aufgaben bearbeiten. Wechseln dazu wieder zu Übung Aufgaben. Klicken Sie auf die Aufgabe, die Sie Bearbeiten möchten. Auf der rechten Seite, dem Textfeld namens SQL, können sie ihren SQL-Code zur Lösung der Aufgabe eintragen. Sie können die Code testen, indem sie in der Leiste unterhalb von Übung auf den Button Ausführen klicken. Das Ergebnis der Auswertung des SQL-Befehls erscheint im Textfeld mit dem Namen Ausgabe.

Nachdem Sie jede Aufgabe bearbeitet haben, können sie die Abgabe exportieren. Dazu klicken Sie auf Abgabe Exportieren und anschließend auf speichern. Nennen Sie die Datei am besten so wie vorgeschlagen. Die erzeugte Textdatei reichen Sie bei ihrem Übungsleiter ein.

sqlchecker's People

Contributors

karstent avatar phseiff avatar ptrckbnck avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

5yntek phseiff

sqlchecker's Issues

java.lang.IllegalStateException: showAndWait is not allowed during animation or layout processing

java.lang.IllegalStateException: showAndWait is not allowed during animation or layout processing
	at javafx.scene.control.Dialog.showAndWait(Dialog.java:332)
	at de.unifrankfurt.dbis.GUIApp.showError(GUIApp.java:29)
	at com.sun.scenario.animation.shared.TimelineClipCore.visitKeyFrame(TimelineClipCore.java:241)
	at com.sun.scenario.animation.shared.TimelineClipCore.playTo(TimelineClipCore.java:180)
	at javafx.animation.Timeline.doPlayTo(Timeline.java:177)
	at javafx.animation.AnimationAccessorImpl.playTo(AnimationAccessorImpl.java:39)
	at com.sun.scenario.animation.shared.SingleLoopClipEnvelope.timePulse(SingleLoopClipEnvelope.java:99)
	at javafx.animation.Animation.doTimePulse(Animation.java:1101)
	at javafx.animation.Animation$1.lambda$timePulse$0(Animation.java:186)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.animation.Animation$1.timePulse(Animation.java:185)
	at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:344)
	at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:515)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:499)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:492)
	at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:320)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
	at java.base/java.lang.Thread.run(Thread.java:834)

Steps to reproduce:
Load the following sqlt file:

/*submission_name*/
Blatt4

/*1a*/
/* Kommentar zu Aufgabe 1a
ueber mehrere Zeilen */
...
/*1b*/
-- Kommentar zu Aufgabe 1b
...
/*2a*/
-- Kommentar zu Aufgabe 1c
...
/*2b*/
-- Kommentar 
...
/*2c*/
-- Kommentar 
...
/*2d*/
-- Kommentar 
...

Copy following sql statement into 1b:

/*1b*/
/* Works with MariaDB 10.3, use union all to stuff two selects together without generating two output tables */
CREATE VIEW eddf_lira_24 AS
SELECT
    ICAO_Code_Origin,
    via,
    Umsteigezeit,
    DepartureDateAndTimeUTC,
    Dauer
FROM
    (
        (
            SELECT
                src.ICAO_Code_Origin,
                "DIREKTFLUG" AS via,
                NULL AS ICAO_Code_Destination,
                src.DepartureDateAndTimeUTC,
                "0" AS Umsteigezeit,
                TIMESTAMPDIFF(MINUTE,DepartureDateAndTimeUTC,ArivalDateAndTimeUTC) AS Dauer
            FROM
                (
                    SELECT
                        *,
                        TIMESTAMPADD(MINUTE,FlightDurationInMinutes,DepartureDateAndTimeUTC) AS ArivalDateAndTimeUTC
                    FROM flightexecution
                ) AS src
            WHERE
                (
                    src.ICAO_Code_Origin = "EDDF" AND
                    src.ICAO_Code_Destination = "LIRA"
                )
        )
    UNION ALL
        (
            SELECT
                src.ICAO_Code_Origin AS ICAO_Code_Origin,
                dst.ICAO_Code_Origin AS via,
                dst.ICAO_Code_Destination,
                src.DepartureDateAndTimeUTC AS DepartureDateAndTimeUTC,
                TIMESTAMPDIFF(MINUTE,src.ArivalDateAndTimeUTC,dst.DepartureDateAndTimeUTC) AS Umsteigezeit,
                TIMESTAMPDIFF(MINUTE,src.DepartureDateAndTimeUTC,dst.ArivalDateAndTimeUTC) AS Dauer
            FROM
                (
                    SELECT
                        *,
                        TIMESTAMPADD(MINUTE,FlightDurationInMinutes,DepartureDateAndTimeUTC) AS ArivalDateAndTimeUTC
                    FROM flightexecution
                ) AS src
            INNER JOIN
                (
                    SELECT
                        *,
                        TIMESTAMPADD(MINUTE,FlightDurationInMinutes,DepartureDateAndTimeUTC) AS ArivalDateAndTimeUTC
                    FROM flightexecution
                ) AS dst ON
                src.ICAO_Code_Destination = dst.ICAO_Code_Origin AND
                TIMESTAMPDIFF(MICROSECOND,src.ArivalDateAndTimeUTC,dst.DepartureDateAndTimeUTC) > 0
            WHERE
                (
                    src.ICAO_Code_Origin = "EDDF" AND
                    dst.ICAO_Code_Destination = "LIRA"
                )
        )
    ) AS a
ORDER BY Dauer;

and the error is displayed.

And yes, I know, that this SQL-Statement is:
a) imperformant as hell
b) for some reason only works on newer versions of mariadb
c) look ugly
But it meets the requirements of only one statement per task and works. If it looks stupid but it works it ain't stupid, right?

Nach Öffnung eines Aufgabenblatts, kann SQLQuecker Reset-Skript nicht mehr finden

Hallo Patrick,

ich konnte einen Fehler bezüglich des Reset-Skript Handlings nachvollziehen bzw. reproduzieren. Meine Schritte:

  1. Nach dem Öffnen von SQLChecker habe ich meine Config File geladen, spart mir Doppeleingaben der Einstellungen.

  2. Reset-Skript ausgewählt

  3. Eine Aufgabe mit Datei-Öffnen geöffnet

Durch Schritt 3. wird das Reset-Skript nicht mehr erkannt. In den Einstellungen befindet sich aber noch der gültige Pfad des im Schritt 2. ausgewählten Reset-Skripts. Als Workaround wäre es hier zu empfehlen, zuerst das Aufgabenblatt und dann das Reset-Skript zu laden.

Liebe Grüße
Sascha

Could not create connection to database server

Hallo,

ich habe Java 10.0.2 mit SQLChecker 1.0 und
Java 11.01 mit SQLChecker 1.0.1 ausprobiert und bekomme bei beiden die gleiche Fehlermeldung:

Resette Datenbank.
[ERROR] com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
[ERROR] Resetten der Datenbank fehlgeschlagen
[ERROR] SQLException (0): Could not create connection to database server.
Die Workbench funktioniert allerdings und hat Verbindung zum Server.
Ich benutzte Windows 10.

Was für Fehlerbehebungsmöglichkeiten gibt es?

ssl problem

Hi, 1.0.2 funktioniert nun mit Java JRE 11 auf Mac. Habe jedoch folgenden Error, wenn ich meinen SQL-Server damit verbinden möchte und eine Aufgabe ausführe.
`> 1a: SQL Code wird ausgeführt.

[ERROR] Wed Nov 07 14:32:23 CET 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
[ERROR] Wed Nov 07 14:32:23 CET 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Query OK, 1 Spalten wurden verändert.
[ERROR] Wed Nov 07 14:32:23 CET 2018 WARN: Caught while disconnecting...
[ERROR]
[ERROR] EXCEPTION STACK TRACE:
[ERROR]
[ERROR]
[ERROR]
[ERROR] ** BEGIN NESTED EXCEPTION **
[ERROR]
[ERROR] javax.net.ssl.SSLException
[ERROR] MESSAGE: closing inbound before receiving peer's close_notify
[ERROR]
[ERROR] STACKTRACE:
[ERROR]
[ERROR] javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
[ERROR] at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
[ERROR] at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
[ERROR] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
[ERROR] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
[ERROR] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
[ERROR] at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:645)
[ERROR] at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:624)
[ERROR] at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1313)
[ERROR] at com.mysql.cj.NativeSession.quit(NativeSession.java:182)
[ERROR] at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1743)
[ERROR] at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:717)
[ERROR] at de.unifrankfurt.dbis.GUI.SQLRunner.call(SQLRunner.java:79)
[ERROR] at de.unifrankfurt.dbis.GUI.SQLRunner.call(SQLRunner.java:16)
[ERROR] at javafx.concurrent.Task$TaskCallable.call(Task.java:1425)
[ERROR] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[ERROR] at java.base/java.lang.Thread.run(Thread.java:834)
[ERROR]
[ERROR]
[ERROR] ** END NESTED EXCEPTION **
[ERROR]
[ERROR] `

Originally posted by @Fl4mer in #1 (comment)

Fehler beim Starten unter Mac OS

Ich kann das Programm nicht starten. Es ist Java v11 installiert.
Der beigefügte Screenshot zeigt die Fehlermeldung.
Die Doku beschreibt den Aufruf mit Versionsnummer und .jar-Endung. Solch einen File sehe ich aber auch nicht...
screenshot sqlchecker

Speicherabfrage vor dem Schließen

Es ist zwar kein Fehler in dem Sinne, aber gehört in jedes Programm finde ich:
Wenn ich das Programm schließe, wäre es schön, wenn ich gefragt werde, ob ich Nichtgespeichertes vorher speichern möchte.

Probleme mit JavaFX auf Java 11

Guten Tag,

ich als Mac User habe die neuste Version von Java runtergeladen Java 11 und beim Starten des Programms über das Terminal, kriege ich folgende Fehlermeldung. Da ich mich nicht gar nicht mit Java auskenne, wäre ich froh über eine mögliche Lösung dieses Problems. Laut de Fehlermeldung scheint es Grafikprobleme zu geben. Müssen womöglich zusätzlich libaries installiert werden?

Graphics Device initialization failed for : es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)

Name im Menü

Es scheint mir, dass im Menü "Ausführen" der Name "Vollständig Ausführen" doppelt auftaucht. Das 1. sollte vermutlich in "Datenbank Rücksetzten" geändert werden.

Email of Code-Buddy

There is a little bug with the email of the code buddy.

In the created .txt the email of the buddy isn't set but your own email is shown two times.

Regards,
Tobi

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.