我正在使用本身具有一些子查询的JDBC运行SELECT
查询。这些子查询之一返回一列数据,然后将其作为ArrayList
处理。由于错误处理,我准备了子查询并单独运行它,然后生成"(item_1, item_2, ... , item_n)"
形式的java String。
请注意,元组元素是整数。
我的总体查询采用PreparedStatement
的形式,我希望使用子查询结果填充?
。
String subqueryResult = "(1, 2, 3)";
// ...
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM table WHERE columnName in ?");
stmt.setString(subqueryResult);
我收到SQL 1064错误,然后指出我的查询看起来像WHERE columnName in ''(1, 2, 3)'
。
我知道文字引号是不平衡的,但是即使它们是平衡的,我们也不能对字符串执行IN
子句。
我该如何安全地填充PreparedStatement
,使查询结果看起来像SELECT * FROM table WHERE columnName in (1, 2, 3)
?