PreparedStatement 在 IN 子句中包含参数列表

新手上路,请多包涵

如何在执行查询时为 JDBC 中的 preparedStatement 中的 in 子句设置值。

例子:

 connection.prepareStatement("Select * from test where field in (?)");

如果这个子句可以包含多个值,我该怎么做。有时我事先知道参数列表,有时我事先不知道。如何处理这种情况?

原文由 Harish 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

我所做的是添加一个“?”对于每个可能的值。

 var stmt = String.format("select * from test where field in (%s)",
                         values.stream()
                         .map(v -> "?")
                         .collect(Collectors.joining(", ")));

替代使用 StringBuilder (这是 10 多年前的原始答案)

 List values = ...
StringBuilder builder = new StringBuilder();

for( int i = 0 ; i < values.size(); i++ ) {
    builder.append("?,");
}

String placeHolders =  builder.deleteCharAt( builder.length() -1 ).toString();
String stmt = "select * from test where field in ("+ placeHolders + ")";
PreparedStatement pstmt = ...

然后愉快地设置params

 int index = 1;
for( Object o : values ) {
   pstmt.setObject(  index++, o ); // or whatever it applies
}

原文由 OscarRyz 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 setArray 下面 javadoc 中提到的方法:

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setArray(int, java.sql.Array)

代码:

 PreparedStatement statement = connection.prepareStatement("Select * from test where field in (?)");
Array array = statement.getConnection().createArrayOf("VARCHAR", new Object[]{"A1", "B2","C3"});
statement.setArray(1, array);
ResultSet rs = statement.executeQuery();

原文由 madx 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏