0

我想将来自请求参数的字符串列表作为单个参数传递给preparedStatement.setObject()。这里我将对象列表转换为单个字符串。

因此,在将这个转换后的字符串传递给 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\'');

还有其他方法可以解决这些方法,例如传递单个字符串,然后为每个单独的字符串执行查询。但这会增加我的代码的时间复杂度。任何人都可以建议我解决这个问题吗?

4

1 回答 1

3

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

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

于 2013-08-23T13:40:46.357 回答