# Wie ein SQL-Statement zusammensetzen?



## Guest (7. Nov 2007)

Ich werf meine Frage gleich einfach mal dazwischen, wenn es hie rgerade schon um SQL und JDBC geht.

Wenn ich vorher nicht weiß, wieviele Parameter das SQL-Datetement bekommen soll, wie erstelle ich das SQL-Statement dann am besten? PreparedStatement scheidet ja aus. Momentan habe ich es so, dass die IDs in einem Array übergeben werden und dann mit einer Schleife dieser Teilbereich des SQL-Statements erzeugt wird.

Also:

```
while(i<anzahl_ID_array)
string += "artikel "+ idarray[i]+" OR "
```
und danach wird das ganze dann per executeQuery ausgeführt. Gibt es noch eine andere Möglichkeit?

_L-ectron-X hat diesen Beitrag am 07.11.2007 um 13:46 Uhr getrennt und verschoben.
Für jede vom Thema abweichende Frage ist ein neuer Thread zu erstellen!
Code-Tags gesetzt._


----------



## y0dA (7. Nov 2007)

http://sql.1keydata.com/de/sql-in.php


----------



## Guest (7. Nov 2007)

Das macht ja eigentlich das gleich oder nicht? 
Da der User die Daten eingeben darf, habe ich halt bedenken wegen den SQL-Injections, die man mit meiner Methode ja bis jetzt ausführen könnte.


----------



## yajp (7. Nov 2007)

nur ein ungetesteter Einfall 

setz den SQL-String weiterhin dynamisch zusammen (jedes Element im Array wird ein Parameter in diesem SQL-String), dann setz die Parameter im preparedStatement mit ner for schleife) ......

ansonsten fällt mir nichts ein als den User-Input eben doch zu filtern ;-) (dann klappts auch nicht mit SQL-Injection)

grüssse


----------



## maki (7. Nov 2007)

iBatis bietet Unterstützung for so etwas.


----------



## L-ectron-X (7. Nov 2007)

Abhilfe in diesem Fall könnte die Verwendung von Hibernate schaffen.
Ansonsten wirst du die Anwendung weiter zerlegen müssen. In reine Datenklassen (POJO's), die die zu speichernden Attribute von Tabellen kapseln und einer Klasse, die global die DB-Connection verwaltet. Diese Klasse holt sich die SQL-Strings je nach Abfrage-Typ (select, insert, update) und Datenklasse (DB-Tabelle) von der Datenklasse bzw. von einer dazwischen "geschalteten" Klasse ab.


----------

