This question already has answers here:
Using Prepared Statements to set Table Name
(7个答案)
7年前关闭。
我正在尝试将PreparedStatement与以下代码结合使用:
显然,当我使用setString()设置表和名称字段时会发生以下情况:
并且查询不起作用。有没有一种方法可以设置不带引号的字符串,因此该行如下所示:
还是我应该放弃它而使用常规语句(参数来自系统的另一部分,用户均未输入)?
(7个答案)
7年前关闭。
我正在尝试将PreparedStatement与以下代码结合使用:
SELECT * FROM ? WHERE name = ?
显然,当我使用setString()设置表和名称字段时会发生以下情况:
SELECT * FROM 'my_table' WHERE name = 'whatever'
并且查询不起作用。有没有一种方法可以设置不带引号的字符串,因此该行如下所示:
SELECT * FROM my_table WHERE name = 'whatever'
还是我应该放弃它而使用常规语句(参数来自系统的另一部分,用户均未输入)?
最佳答案
参数不能用于参数化表或参数化任何数据库对象。它们主要用于参数化WHERE/HAVING子句。
要执行您想要的操作,您需要自己进行替换并根据需要创建一个常规语句。
当您使用准备好的语句时,这是对数据库的提示,可以对语句进行前期处理-例如解析字符串,并可能确定执行计划。如果查询中使用的对象可以动态更改,则数据库无法做很多前期准备。
08-04 16:05