我正在尝试学习如何将 MySQL 与 Java 结合使用,正如标题所示,我在准备语句方面遇到了问题。
我有一个名为 temp 的 MySQL 表,其中包含值(直接从 MySQL 控制台输出):
mysql> select * from temp;
+------+-----------------------------------------------+
| id | value |
+------+-----------------------------------------------+
| 1 | this is a first item |
| 2 | this is the second item |
| 3 | This is the third item and slightly redundant |
+------+-----------------------------------------------+
3 rows in set (0.00 sec)
在 Java 中,我像这样访问数据库:
stmt = conn.prepareStatment("select * from ?");
stmt.setString(1,"temp");
ResultSet rs = stmt.executeQuery(); //This method call throws the exception
stmt.toString
揭示:select * from 'temp'
异常消息为: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 ''temp'' at line 1
当我输入select * from 'temp'
时( stmt.toString()
的输出)直接进入 MySQL 控制台我得到完全相同的消息。
正如您可能想象的那样,我计划将此概念应用到 JSP 网页,其中表名称将是 HTTP GET 参数。所以我的问题是:如何将表名绑定(bind)到准备好的语句,如果不可能(这是我从 PHP 的类似问题中得到的感觉),我将如何清理表名的输入?
最佳答案
你不能这么做。您需要使用字符串连接来构造 sql。 PreparedStatement
用于列值而不是表名称。
关于java - 将表名作为准备语句的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213779/