本文介绍了在 IN 子句中带有参数列表的 PreparedStatement的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How to set value for in clause in a preparedStatement in JDBC while executing a query.

示例:

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

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

If this in-clause can hold multiple values how can I do it. Sometimes I know the list of parameters beforehand or sometimes I don't know beforehand. How to handle this case?

推荐答案

我要做的是添加一个?"对于每个可能的值.

What I do is to add a "?" for each possible value.

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

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

Alternative using StringBuilder (which was the original answer 10+ years ago)

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 = ...

然后愉快地设置参数

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



这篇关于在 IN 子句中带有参数列表的 PreparedStatement的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-29 18:55
查看更多