java - 将表名作为准备语句的参数传递

标签 java mysql sql prepared-statement

我正在尝试学习如何将 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/

相关文章:

java - string[] 的不兼容类型错误

java - 如何在不使用 JavaScript 的情况下通过 GWT 更改语言环境

php - 对查询结果进行随机但有一定规则的排序(usort)

mysql - Java 应用程序在亚马逊 AWS 中运行一段时间后停止运行

sql - 如何根据相同的日期范围计算不同表中的行数

sql - 如何在 SQL 中从 XML 中选择值

Java JApplet 渲染问题

javascript - Selenium 中图像验证的 NullPointerException

php - 如何使用正则表达式替换内容

sql - 在 Access SQL 中查询 "workweek"