PreparedStatement Parameter mehrfach verwenden

Status
Nicht offen für weitere Antworten.

Landei

Top Contributor
Folgendes Problem: In einem PreparedStatement soll in der Where-Clause auf einen Wert getestet werden, aber nur wenn auch einer angegeben wurde. Ich hatte mir gedacht, dass ich ansonsten -1 übergebe und dann etwas schreibe wie
"SELECT * FROM bar WHERE foo=? OR ?=-1"
Nun sieht es so aus, als könnte ich die Parameter im String nicht "numerieren" (wie das z.B. bei Format-Strings geht), also müsste ich meinen Wert tatsächlich zweimal übergeben.

Hat jemand eine Idee?
 

tfa

Top Contributor
Mach dir 2 verschiedene Prepared Statements - für jeden Anwendungsfall eins. Oder verwende einen ORM.
 
S

SlaterB

Gast
zweimal übergeben wäre aber auch kein Beinbruch,
notfalls baust du dir deinen eigenen Wrapper drumherum, der benannte Parameter versteht und automatisch doppelt einfügt
 
S

SlaterB

Gast
warum willst du überhaupt ein PreparedStatement?
wenn sich dein Statement derart dynamisch ändert und manche Einschränkungen wegfallen, dann kann man da eh nix preparen,
dann kannst du auch jedes mal dynamisch ein neues Statement zusammenbauen. gerne wieder ein PreparedStatement
 

tfa

Top Contributor
Landei hat gesagt.:
Mach dir 2 verschiedene Prepared Statements
Gute Idee, aber ich möchte das geschilderte Verhalten für drei Parameter haben, das macht dann 8 verschiedene PreparedStaements :-(
Dann schreibt man sich eine Methode, die die Query entsprechend vorhandener Parameter zusammenbastelt. Dann kannst du sogar beliebig viele Parameter unterstützen.
 

Landei

Top Contributor
Warum willst du überhaupt ein PreparedStatement?

Weil ich mich z.B. nicht damit rumschlagen will, wie irgendeine Datenbank Dates formatiert usw.

Dann schreibt man sich eine Methode, die die Query entsprechend vorhandener Parameter zusammenbastelt. Dann kannst du sogar beliebig viele Parameter unterstützen.

Darauf wird es hinauslaufen... Leider kann man die Parameter erst dann setzen, wenn der String fertig ist :-/
 

tfa

Top Contributor
PreparedStatement sind schon Pflicht. Dynamische Querys sollte man nicht verwenden.
Leider kann man die Parameter erst dann setzen, wenn der String fertig ist
Das Problem versteh ich nicht. Die Parameter werden doch sowieso getrennt gesetzt.
 
S

SlaterB

Gast
> Dynamische Querys sollte man nicht verwenden.

+ vorher

> Dann schreibt man sich eine Methode, die die Query entsprechend vorhandener Parameter zusammenbastelt.

ja wie denn nun?
 

tfa

Top Contributor
SlaterB hat gesagt.:

Statisch (Prepared):
Code:
update tabelle set name=? where status=? and irgendwas=?

Dynamisch:
Code:
update tabelle set name='elke mustermann' where status='xyz' and irgendwas='bla'
 

tfa

Top Contributor
Trotzdem ein riesen Unterschied. Der Zusammenbau ist billig und kann performancemäßig vernachlässigt werden.
 
S

SlaterB

Gast
ich meine ja nur, dass dein Satz 'Dynamische Querys sollte man nicht verwenden' verwirrend ist,

ob man nun nun
query = "update tabelle set name='elke mustermann' ";
if (x) {
query += "where status='xyz' ";
}

schreibt oder

query = "update tabelle set name=? ";
if (x) {
query += "where status=?";
}

ist die Entscheidung zwischen Statement und PreparedStatement,
aber beide Kommandos sind doch dynamisch aus mehreren Teilen zusammengebaut


'Dynamische Querys' ist doch kein Fachbegriff, der sich gegen PreparedStatement ausspricht
 

tfa

Top Contributor
Es gibt jedenfalls den Fachbegriff des "dynamischen" und "statischen" SQL, und Prepared bzw. Unprepared Statements haben schon was damit zu tun. Auf welche Art das im Java-Programm zusammengesetzt wird ist völlig egal, das ist richtig.
 

Landei

Top Contributor
OK, ich bastele jetzt den String "dynamisch" zusammen, und nehme nur für die Datumse ?-Parameter. Danke!
 

tfa

Top Contributor
Und die anderen Parameter machst du hart in den String? Also gemischt statisch/dynamisch? Lieber nicht!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R PreparedStatement ohne Parameter? Datenbankprogrammierung 4
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
V SQLite NullPointerException in preparedStatement.close(); Datenbankprogrammierung 8
Neumi5694 SQL-Statement Preparedstatement - try resource vs. Garbage Collector Datenbankprogrammierung 5
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
S CSV Datein in DB übernehmen:PreparedStatement bzw executeBatch() zu langsam Datenbankprogrammierung 11
P MySQL PreparedStatement vs. StoredProcedure vs. executeBatch Datenbankprogrammierung 1
P PreparedStatement IN-Funktion Datenbankprogrammierung 8
turmaline Oracle [PreparedStatement] Klammer fehlt Datenbankprogrammierung 9
C PreparedStatement und null Datenbankprogrammierung 13
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
D MySQL PreparedStatement mit c3p0 schlägt fehl. Warum? Datenbankprogrammierung 3
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
M MySQL preparedStatement und Anführungszeichen Datenbankprogrammierung 6
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G PreparedStatement und Transaktionen Datenbankprogrammierung 2
N Leeres Blob in ein PreparedStatement eintragen Datenbankprogrammierung 2
P PreparedStatement batch und getGeneratedKeys Datenbankprogrammierung 7
T MySQL PreparedStatement mit INSERTs langsam, Batch-Statement auch Datenbankprogrammierung 4
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
Guybrush Threepwood PreparedStatement: execute() oder executeUpdate() Datenbankprogrammierung 3
R PreparedStatement mit verschiedenen Datenbanken Datenbankprogrammierung 2
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
R Zugriff auf SQL im PreparedStatement Datenbankprogrammierung 4
W preparedStatement (MySQL - JDBC) Datenbankprogrammierung 5
S Create Table mit PreparedStatement Datenbankprogrammierung 2
S Select mit PreparedStatement Datenbankprogrammierung 2
S PreparedStatement setArray(int i, java.sql.Array) Datenbankprogrammierung 17
M Preparedstatement SQL-string auslesen Datenbankprogrammierung 13
T PreparedStatement anzeigen Datenbankprogrammierung 10
A PreparedStatement im Servlet - Referenz speichern Datenbankprogrammierung 3
P PreparedStatement - Angabe des PK Datenbankprogrammierung 4
J Fehler beim PreparedStatement Datenbankprogrammierung 2
B PreparedStatement - anzahl ParameterValues Datenbankprogrammierung 6
J PreparedStatement Datenbankprogrammierung 5
C PreparedStatement Datenbankprogrammierung 2
R DB2 PreparedStatement Batches ungültige Reihenfolge Datenbankprogrammierung 4
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
S MySQL SQLException Parameter index out of range (1 > number of parameters, which is 0). Datenbankprogrammierung 10
R Datenbankerstellung: Übergabe Parameter Datenbankprogrammierung 0
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
F Oracle The parameter name [...] in the query's selection criteria does not match any parameter name d Datenbankprogrammierung 2
M Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse Datenbankprogrammierung 2
K Hibernate Criteria Restrictions.in("...","..") - Fehlender In- oder OUT-Parameter auf Index:: 1 Datenbankprogrammierung 3
H DB auslesen (Hibernate, Query, Parameter) Datenbankprogrammierung 8
A Oracle Session Parameter per JDBC? Datenbankprogrammierung 14
S Parameter in SQL-Abfrage nutzen Datenbankprogrammierung 8
R SELECT aus hsqldb mit Parameter Datenbankprogrammierung 2
K [hibernate] show_sql: Werte der Parameter anzeigen Datenbankprogrammierung 3
R Invalid parameter bindings bei MS SQL Server Datenbankprogrammierung 2
A Datenbankverbinung mehrfach verwenden Datenbankprogrammierung 2
ruutaiokwu unique kombination, welche mehrfach vorkommen darf??? Datenbankprogrammierung 3
K Hibernate mehrfach doppelte Einträge in der Ergebnissmenge Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben