Mysql Drop Tabelle als PreparedStatement funktioniert nicht für mich

8

Diese vorbereitete Anweisung scheint für mich wie gültiges SQL zu sein.

%Vor%

Aber wenn ich das ausführe, bekomme ich den Fehler:

  

Ausnahme im Thread "Haupt"   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Sie haben ein   Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrem entspricht   MySQL-Server-Version für die richtige Syntax in der Nähe von '' Features '' zu verwenden   Linie 1 bei   sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Methode)     beim   sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:57)     beim   sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)     bei java.lang.reflect.Constructor.newInstance (Konstruktor.java:532)     bei com.mysql.jdbc.Util.handleNewInstance (Util.java:406) um   com.mysql.jdbc.Util.getInstance (Util.java:381) um   com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1031) um   com.mysql.jdbc.SQLError.createSQLException (SQLError.java:956) um   com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3558) um   com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:3490) um   com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:1959) um   com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2109) um   com.mysql.jdbc.ConnectionImpl.execSQL (ConnectionImpl.java:2648) um   com.mysql.jdbc.PreparedStatement.executeInternal (PreparedStatement.java:2077)     beim   com.mysql.jdbc.PreparedStatement.execute (PreparedStatement.java:1356)     bei doriangray.db.TestSetup.main (TestSetup.java:62)

Sieht jemand das Problem hier? Ich bin ratlos.

    
Kevin 12.02.2012, 20:29
quelle

4 Antworten

7

MySQL unterstützt keine vorbereiteten Anweisungen mit variablen Tabellennamen, daher müssen Sie dies auf althergebrachte Weise tun, indem Sie SQL erzeugen:

%Vor%

In diesem Fall können Sie auch reguläre Anweisungen verwenden, da Sie mit vorbereiteten Anweisungen nichts gewinnen.

    
Joni 12.02.2012, 20:44
quelle
1

Ich denke, dass dein Code diese Aussage vorbereitet:

%Vor%

solange du willst:

%Vor%     
ypercubeᵀᴹ 12.02.2012 20:34
quelle
1

PreparedStatements werden verwendet, um die Datenbank die Abfrage einmal zu kompilieren (den Ausführungsplan zu erstellen), sodass die Ausführung der gleichen Abfrage mit anderen Parametern schneller erfolgt.

Kurz gesagt, in einer PreparedStatement-Datei können Sie keine Platzhalter für Datenbankobjekte haben. Einschließlich Tabellenname, Spaltenname, verschiedene Where-Klauseln und ....

    
Amir Pashazadeh 12.02.2012 20:43
quelle
0

Sie können keine vorbereitete Anweisung verwenden, um Tabellen mit dynamischen Tabellennamen zu löschen. Wenn Sie die Tabellennamen jedoch erst zur Laufzeit kennen und in ihnen Leerzeichen enthalten können, müssen Sie sie in Back-Ticks einschließen:

%Vor%     
whistling_marmot 01.12.2017 10:47
quelle