我想将来自request参数的String List传递给preparedStatement.setObject()作为单个参数。我已将对象列表转换为单个String。
因此,在将此转换后的String传递给setObject方法时,它将'转换为\'。
所以我的查询就像:
select * from category where category IN (?)
for (int counter = 0; (!sqlParams.isEmpty()) && counter < sqlParams.size(); counter++) {
System.out.println(sqlParams.get(counter));
stmt.setObject(counter + 1, sqlParams.get(counter));
System.out.println(stmt.toString());
}
这里sqlParams.get(counter)给我以下值。
'Adult', 'Classic', 'Fantasy', 'Mystery'
但是我正在使用stmt.setObject(),并打印stmt的值,它显示以下值:
'\'Adult\', \'Classic\', \'Fantasy\', \'Mystery\''
所以查询形成是这样的:
SELECT * FROM mytable WHERE category IN ('Adult\', \'Classic\', \'Fantasy\', \'Mistry\'');
还有其他方法可以解决这些方法,例如传递单个String然后查询每个String的执行情况。但这会增加我的代码的时间复杂度。 谁能建议我解决这个问题?
答案 0 :(得分:3)
当参数的数量是可变的时,不能使用JDBC预处理语句,就像这里一样。的?在查询中扩展为单个值,而不是以逗号分隔的几个值。
你可以做的是构造一个具有适当数量的s的sql,然后在循环中设置每个参数。