我想将来自请求参数的字符串列表作为单个参数传递给preparedStatement.setObject()。在这里,我将对象列表转换为一个字符串。
因此,在将这个转换后的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'');
还有其他方法可以解决这些方法,比如传递单个字符串,然后为每个字符串执行查询。但这会增加我的代码的时间复杂性。有人能给我推荐解决方案吗?
JDBC准备的语句不能在参数数量可变的情况下使用,如这里所示。这个在查询中被扩展为单个值,而不是用逗号分隔的几个值。
您所能做的就是构造一个具有适当数量的sql?s,然后在循环中设置每个参数。