PreparedStatement.setString() 不带引号的方法

2022-09-03 12:47:22

我正在尝试使用类似如下代码的准备语句:

SELECT * FROM ? WHERE name = ?

显然,当我使用 setString() 设置表和名称字段时,会发生什么情况:

SELECT * FROM 'my_table' WHERE name = 'whatever'

并且查询不起作用。有没有办法设置不带引号的字符串,使行如下所示:

SELECT * FROM my_table WHERE name = 'whatever'

或者我应该放弃它并使用常规语句(参数来自系统的另一部分,用户都没有输入这些参数)?


答案 1

参数不能用于参数化表,也不能参数化任何数据库对象。它们主要用于参数化 WHERE/HAVING 子句。

要执行所需的操作,您需要自己执行替换,并根据需要创建常规语句。

当您使用预准备语句时,这是对数据库的提示,用于对语句进行前期处理 - 例如,解析字符串并可能确定执行计划。如果查询中使用的对象可以动态更改,则数据库无法进行太多的前期准备工作。


答案 2

遗憾的是,您无法参数化预准备语句的表名。如果需要,您可以构造一个字符串并将其作为动态 SQL 执行。


推荐