MySQL preparedStatement und Anführungszeichen

majestic

Mitglied
Hallo,

ich versuche
SQL:
USE dbname;
in ein preparedStatement zu verpacken:

Java:
this.useDb = (PreparedStatement) this.conn.prepareStatement("USE ? ;");
[....]
this.useDb.setString(1, dbname);
this.useDb.execute();

Allerdings bekomme ich die Exception:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Head'' (das sind zwei ') at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362)
at database.ReadDatabase.readDb(ReadDatabase.java:65)
at database.ReadDatabase.answerRequest(ReadDatabase.java:93)

Wenn ich auf der Serverkonsole USE "test"; absetze funktioniert es wunderbar ..
Ich habe schon setEscapeProcessing auf false gestellt, hat aber nichts gebracht. Laut Doku hat diese Funktion auch keinen Effekt mehr:
Since prepared statements have usually been parsed prior to making this call, disabling escape processing for PreparedStatements objects will have no effect.

Nachtrag: Wenn ich das ohne preparedStatement mache, also:
Java:
Statement usedb = this.conn.createStatement();
usedb.execute("USE "+dbname);

gehts wunderbar.

Habt ihr eine Idee wie ich das Problem lösen könnte?

Freundliche Grüße,

majestic
 
Zuletzt bearbeitet:

qowaz

Mitglied
Versuch es mal ohne das Semikolon

Java:
this.useDb = (PreparedStatement) this.conn.prepareStatement("USE ? ");
 
M

maki

Gast
Warum verwendest du explizit ein "use db"?
Das kann man doch schon über die URL und die Parameter regeln.
 
S

SlaterB

Gast
was lässt dich denn vermuten, dass das grundsätzlich überhaupt geht?
hast du auf diesem runden Erdball irgendwo ein Beispiel gesehen, welches dahingehend funktionierte?
wenn nicht, dann immer vorsichtig mit komischen Versuchen sein..

alle Beispiele, die man so kennt, z.B. auf
PreparedStatement (Java 2 Platform SE v1.4.2)

lauten zunächst ganz harmlos
Java:
   PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                     SET SALARY = ? WHERE ID = ?");
   pstmt.setBigDecimal(1, 153833.00)
   pstmt.setInt(2, 110592)
die ?, die Parameter werden für einfache Strings, Zahlen und ähnliche austauschbare Werte benutzt,

nicht möglich ist dagegen, damit Attribute, ganze Tabellen, Vergleichsoperatoren oder sonstige SQL-Schlüsselwörter zu parametrisieren,

dein dbname ist immerhin strenggenommen auch eine Zeichenkette in Anführungszeichen,
dennoch würde ich zunächst davon ausgehen dass PreparedStatement dafür nicht gedacht ist..
 

majestic

Mitglied
Hallo,

hast du auf diesem runden Erdball irgendwo ein Beispiel gesehen, welches dahingehend funktionierte?

Nein, ich bin der einzigesten von 10 Milliarden Menschen der dieses Problem hat, deshalb poste ich ja hier. ;)

Also ich will zwischen den Datenbanken hin und her wechseln, ist vom Programmentwurf her leider nicht anderst möglich. Da dies recht häufig vorkommt wäre das preparedStatement nützlich. Momentan sende ich die Abfrage direkt ab, das funktioniert.

Und wie gesagt wären Anführungszeichen auch kein Problem, das Problem sind die zwei Hochkommas. Ich habe noch nicht verstanden warum Java die macht und wie ich die loswerde. Wenn Parameter eingebunden werden wie SlaterB es angesprochen hat mit WHERE name = ? und setString werden ja auch Anführungszeichen angefügt...

Und Danke für eure Antworten!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
R PreparedStatement ohne Parameter? Datenbankprogrammierung 4
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
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
Landei PreparedStatement Parameter mehrfach verwenden Datenbankprogrammierung 18
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
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
W Problem mit Anführungszeichen in SQL-Textfeld Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben