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.
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.
Ich denke, dass dein Code diese Aussage vorbereitet:
%Vor%solange du willst:
%Vor%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 ....
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%Tags und Links java mysql prepared-statement jdbc