【发布时间】:2012-03-04 09:00:07
【问题描述】:
这个准备好的语句对我来说似乎是有效的 SQL。
PreparedStatement dropTable = cnx.prepareStatement(
"DROP TABLE IF EXISTS ?");
dropTable.setString(1, "features");
dropTable.execute();
但是当我运行它时,我得到了错误:
线程“main”中的异常 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在“功能”附近使用正确的语法 第 1 行 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:532) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 在 com.mysql.jdbc.Util.getInstance(Util.java:381) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490) 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109) 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648) 在 com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077) 在 com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1356) 在 doriangray.db.TestSetup.main(TestSetup.java:62)
有人看到这里的问题吗?我被难住了。
【问题讨论】:
-
我不是 Java,但我知道的所有准备好的语句库都不支持动态表名。
标签: java mysql jdbc prepared-statement