java – 将表名作为预处理语句的参数传递

参见英文答案 > Using Prepared Statements to set Table Name                                    6个
我正在尝试学习如何在Java中使用MySQL,正如标题所说,我在准备语句时遇到问题.

我有一个名为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揭示:从’temp’中选择*
并且异常消息是:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的”temp’附近使用正确的语法

当我从’temp'(stmt.toString()的输出中选择select *直接进入MySQL控制台时,我得到完全相同的消息.

正如您可能想象的那样,我计划将此概念应用于JSP网页,其中表名将是HTTP GET参数.所以我的问题是:如何将表名绑定到准备好的语句,如果不可能(这是我从PHP的类似问题得到的氛围),我将如何清理表名的输入?

你不能这样做.您需要使用字符串连接构造sql. PreparedStatement用于列值而不是表名.
https://stackoverflow.com/questions/21213779/passing-table-name-as-parameter-of-prepared-statement

转载注明原文:java – 将表名作为预处理语句的参数传递