# Frage zu Ausführungsmöglichkeiten von SQL Befehlen



## DennisXX (4. Aug 2011)

Hi Folks !

Ich habe nochmal eine Frage an euch. Gehen wir mal davon aus, dass ich eine kleine Datenbank mit wenigen Tabellen habe.

Außerdem habe ich eine kleine Benutzeroberfläche. Über diese Benutzeroberfläche möchte ich ausschließlich mit meiner Datenbank kommunizieren. Ich möchte also direkt über die Oberfläche komplexere SQL Befehle wie z.B. SELECT Statements mit einem oder auch mehreren INNER JOIN, LEFT OUTER JOIN und RIGHT OUTER JOIN, evtl. auch UPDATE, ALTER und DELETE Statements. Diese Statements können eine oder mehrere Tabellen und auch Subselects beinhalten. Also eben ein Großteil des kompletten SQL Programms !

Ich würde gerne, dass der Benutzer diese Befehle innerhalb der Oberfläche in ein Textfeld eingibt und diese dort dauerhaft persistent gespeichert und auch nach Bedarf ausgeführt werden können.

Kann man diese SQL Befehle dort einfach eingeben und als String speichern (z.B. selbst in einer Datenbanktabelle oder in einem String Array) und sie ggf. bei Bedarf, eben wenn der Benutzer konkret daten aus der datenbank bekommen möchte, diesen SQL String an die Codefraqmente meines Programms weiterleiten als kompletten String weiterreichen, und das diese Codefraqmente dann die Verbindung zur Datenbank aufbauen und dabei diesen String dann als SQL Befehl interpretieren bzw. übersetzen? In Java ist das glaube ich die Klasse SQL und dann eben die entsprechenden Methoden.

Ich hoffe, es ist halbwegs verständlich, worauf ich hinausmöchte. Funktioniert so etwas, ganz egal, wie komplex die SQL Befehle eigentlich sind?

Danek schön für die Hilfestellungen !!

Greetz
Dennis


----------



## Evil-Devil (4. Aug 2011)

Klar funktioniert das. Eine SQL Anweisung ist ein Textstring. Von daher kannst du den auch in der Datenbank speichern.
Allerdings macht es wenig Sinn nicht funktionierende Abfragen zu speichern. Ich würde es erst erlauben die Abfrage zu speichern, wenn sie denn auch funktioniert. Wobei du für sowas priviligierte Benutzer anlegen solltest. Nicht das dir einer der Benutzer ein "Drop Table" oder "Drop Database" ausführt


----------



## DennisXX (4. Aug 2011)

Danke für die Antwort !

Was wäre denn eine gute und praxistaugliche Möglichkeit diese SQL Befehle zu speichern? Etwa in einer Datenbanktabelle als Textstrings oder in einer separaten Datei (z.B. SQL_Statements.txt oder so) und dann von dort ein und auszulesen?

Greetz
Dennis


----------



## Marcinek (4. Aug 2011)

Auf keinen Fall da, wo der User es ändern kann.


----------



## DennisXX (5. Aug 2011)

Marcinek hat gesagt.:


> Auf keinen Fall da, wo der User es ändern kann.



Naja man könnte ja evtl. Txt-Dokumente per Passwort oder so in Windows schützen, oder alternativ wirklich eine Datenbanktabelle in einer separarten Datenbank. Aufgrund meines bisherigen geringer Praxisbezugs weiß ich nicht, was da die beste Lösung sein kann.

Greetz
Dennis


----------



## turtle (5. Aug 2011)

Ich bin ja der Meinung, dass das ganze wenig Sinn macht:shock:

Wenn ein User selbst geschriebene SQL-Kommandos schreiben kann, sind da wohl auch Kommandos bei, die die DB verändern wollen. Dies möchtest Du wahrscheinlich NICHT zulasen, weswegen eine Menge weiterer Probleme gelöst werden müssten. Mit welchen Rechten laufen die SQL-Befehle? Können Befehle wiederholt werden? Gibt es Transaktionen?

Da ist die Frage, wo und wie das SQL aufbewahrt wird, nicht sehr interessant. Da es meines Wissens auch keine Test-DB im Netz "zum Spielen" gibt, frage ich mich, warum das so ist. Anscheinend sind die Probleme dabei dich grösser als Du Dir gerade vorstellst.

Ich bin mir auch nicht sicher, ob ich verstanden habe, wofür das Ganze sein soll. "Nur", damit Du einem SQL-Anfänger die Mühe abnimmst, selber eine DB aufzusetzen? Ausserdem bin ich der Meinung, dass dies ebenfalls eine wichtige Lernerfahrung ist. Und wenn diese DB erstmal geschrottet wurde

Als ich rate davon ab:noe:

/Edit: Lese gerade, dass Du das vielleicht nur für Dich benötigst. Das sollte jeder bessere SQL-Client bereits können, das bereits abgeschickte SQL-Kommandos erneut ausgeführt werden können.


----------



## DennisXX (5. Aug 2011)

Hi Turtle !



turtle hat gesagt.:


> Wenn ein User selbst geschriebene SQL-Kommandos schreiben kann, sind da wohl auch Kommandos bei, die die DB verändern wollen. Dies möchtest Du wahrscheinlich NICHT zulasen, weswegen eine Menge weiterer Probleme gelöst werden müssten. Mit welchen Rechten laufen die SQL-Befehle? Können Befehle wiederholt werden? Gibt es Transaktionen?



Die SQL Befehle sind derzeit nicht mit irgendwelchen Restriktionen versehen, können im Prinzip so oft wie möglich wiederholt werden (klar irgendwann müssen qualifizierte Fehlermeldungen ausgegeben werden, z.B. wenn Befehle versucht werden doppelt abzusetzen) und mit Transaktionenn möchte ich gerne zukünftig arbeiten, derzeit ist das aber noch nicht realisiert.

Jeder von meinen Benutzer kann da ausführen was er möchte. Sie sind derzeit in Textdokumenten zwischengespeichert und werden per Paste & Copy auf einer Datenbank ausgeführt.

Die Anwendungen soll aber nur 3 Benutzern insgesamt zur Verfügung stehen, die dazu auch noch sehr fit in den entsprechenden Abläufen sind und sich schon jahrelang mit dieser Thematik beschäftigen. Durch eine neugestaltete Software soll eben vieles verbessert werden und die Benutzer sollen effizienter arbeiten.



> Da es meines Wissens auch keine Test-DB im Netz "zum Spielen" gibt, frage ich mich, warum das so ist. Anscheinend sind die Probleme dabei dich grösser als Du Dir gerade vorstellst.



Ich versteh ehrlich gesgat nicht, was Du hiermit meinst?



> Ich bin mir auch nicht sicher, ob ich verstanden habe, wofür das Ganze sein soll. "Nur", damit Du einem SQL-Anfänger die Mühe abnimmst, selber eine DB aufzusetzen? Ausserdem bin ich der Meinung, dass dies ebenfalls eine wichtige Lernerfahrung ist.



Nein das hast Du falsch verstanden. Hier wird nichts neu aufgesetzt, sondern in einer bestehenden Datenbank immer wieder vieles auf die gleiche Art und Weise "abgearbeitet". Diese Schritte (die kann ich hier nicht alle beschreiben, das würde den Rahmen sprengen) sollen mithilfe einer vernünftigen Software schneller realisiert werden können, indem man nicht mehr mit Paste Copy SQl Befehle absetzt oder sogar noch direkt auf der Datenbank arbeitet, sondern das alles schön über eine gute Benutzeroberfläche zu steuern. 

Greetz
Dennis


----------



## turtle (5. Aug 2011)

Spricht etwas gegen einen SQL-Client a la Squirrel?


----------



## DennisXX (5. Aug 2011)

Leider ja, da es eine individuelle Lösung zu sein. So ist leider die Vorgabe meines Unternehmens.


----------



## turtle (5. Aug 2011)

Das hört sich alles SEHR merkwürdig an.

Ein Unternehmen entwickelt einen eigenen SQL-Client, setzt aber mehrfach bewährte SW nicht ein?



> Durch eine neugestaltete Software soll eben vieles verbessert werden und die Benutzer sollen effizienter arbeiten.



Was soll denn da verbessert werden?


----------



## DennisXX (5. Aug 2011)

Gewisse Arbeitsabläufe sollen darauf schneller umgesetzt werden können. Tut mir leid, aber ich kann Dir das nicht näher erklären, da das für Außenstehende recht sbsrakt ist, was hier in meinem Unternehmen umgesetzt wird.

Greetz
Dennis


----------



## turtle (5. Aug 2011)

Hört sich so an, als ob eine einfach Swing-Applikation reicht, in der man einen SQL-Befehl eingeben kann und über einen Button ausführen lassen. Über einen anderen Button kann die bisherige SQL-Historie gespeichert werden. Damit soll wahrscheinlich die Eingabe von SQL-Befehlen verkürzt werden, Stichwort Autocompletion.

Warscheinlich sollte die Ausgabe der DB in einer Textarea angezeigt werden können. Sieht also in Total nach drei Controls aus.

Scheint, wenn's das bleibt, nicht allzu schwierig zu sein, oder?


----------



## DennisXX (5. Aug 2011)

Wenn man die entsprechend benötigten Technologien beherrscht, dann gebe ich Dir recht, das Projekt ist eigentlich noch recht überschaubar.

Greetz
Dennis


----------



## Evil-Devil (5. Aug 2011)

Warum brauch man überhaupt für Leute die angeblich Fit in der Materie sind einen neuen Client? Toad oder Komandozeile FTW....


----------

