# Java SQL ";" zwischen sql statements



## socke999 (14. November 2008)

Hallo zusammen,
ich möchte einen kleine Datenbank Applikation schreiben, bei der man in ein JTextField das auszuführenden SQL-Kommando hineinschreibt und das dann ausgeführt wird und gegebenen falls eine Ergebnistabelle angezeigt wird.

So weit so gut, funktioniert auch alles schon sehr gut, nur hab isch ein Problem:
Wenn ich in mein JTextField, wo der Befehl eingegeben, wird mehrere SQL-Kommandos hinschreibe und sie mit  ";" trenne, was ja jede Datenbank sollte können, dann tretet immer ein Fehler auf. 
z.B. SQL:

```
insert into test values (1); 
insert into test values(2);
```

Irgendwie kennt die Datenbank (DB2) das Trennzeichen ";" nicht. Nun wird das mit ziemlich hoher Wahrscheinlichkeit nicht an der Datenbank liegen sondern an mir ;-) 

Kann man bzw. muss man das irgendwo noch einstellen?
So baue ich eine Verbindung auf:

```
Connection connection = datasource.getConnection();
Statement statement = connection.createStatement();
```


Um eine Anweisung auszuführen benutze ich:

```
String sql = commandTextArea.getText();
statement.execute(sql);
```

soweit funktioniert ja auch alles, verbinden kann ich mich. Kann auch eine SQL Anweisung ausführen, nur mehrere zugleich mit ";" getrennt funktioniert nicht. Ich habe die Dokumentation auch schon durchstudiert, jedoch nix wirklich hilfreiches gefunden. Ich bin mir aber sicher, das man hier bei einen der beiden Objekte das irgendwie einstellen kann.


Oder liege ich da ganz falsch?
Kann mir jemand weiter helfen?


----------



## The_S (14. November 2008)

Wenn du mehrere Zugleich ausführen würdest, müsstest du ja theoretisch auch zwei ResultSets zurück bekommen. Was hältst du davon, dass du dein SQL-Statement an einem Semikolon trennst und jedes Statement einzeln ausführst?


----------



## Kryptaesthesie (14. November 2008)

Guten Morgen,
wenn du mehrere Statements behandelnt möchtest, dann schreib mehrere SQL-Anweisungen in dein Textfeld rein und trenne die Anweisungen durch ein Semikolon.
Im Programmcode erstellst du dann eine Arraylist<String>, wo jeder Eintrag einen SQL-Befehl hält. 

In einer Schleife läufst du dann die Arraylist durch und schickst jede Anweisung einzeln ab.
Auf diese Weise kannst du auch in einem Log direkt auswerten (oder in einer Logausgabe direkt auf deiner Programmoberfläche), welche Anweisung geklappt hat und welche nicht durchgelaufen sind.

Gruß
Gerrit


----------



## socke999 (14. November 2008)

@ The S
man kann natürlich Select-Statements die ein resultat zurück liefern nur 1 mal aufrufen, also da kann man nicht mehrer anweisungen zugelich abschicken.

@Kryptaesthesie
das hab ich mir auch schon gedacht, nur ist es gar nicht so einfach, zu erkennen, wann ein SQL befehl fertig ist, denn man kann ja nicht einfach nach ";" trennen.
Was wenn man so einen befehl schreibt:

```
insert into test (a) values ("Das ist ein Absatz; Bla Bla Bla.");
insert into test (a) values (" \"Ein weiterer Absatz;\"\n");
```
Also das ist schon etwas kniffliger da man auch noch auf " schauen muss, ob das jetzt ein String im SQL Befehl ist oder nicht. Dann muss man auch noch bedenken das im SQL String ein \" drinnen sein kann ... also nicht so einfach das ganze. Man muss sich da schon genauer mit der SQL-Syntax beschäftigen.

Kann man das nicht einfach irgendwie beim Connection Objekt einstellen, wie z.B. das auto Commit?


----------



## The_S (14. November 2008)

Hab ich was anderes behauptet wie Kryptaesthesie? Meinte eigentlich das Selbe  .

Naja, musst dir halt nen Parser für SQL-Statements schreiben. Vermutlich gibts sowas aber auch schon.


----------

