不将String的List作为单个参数传递给preparedStatement.setObject()

时间:2013-08-23 13:33:05

标签: java mysql jdbc in-clause

我想将来自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的执行情况。但这会增加我的代码的时间复杂度。 谁能建议我解决这个问题?

1 个答案:

答案 0 :(得分:3)

当参数的数量是可变的时,不能使用JDBC预处理语句,就像这里一样。的?在查询中扩展为单个值,而不是以逗号分隔的几个值。

你可以做的是构造一个具有适当数量的s的sql,然后在循环中设置每个参数。