使用PreparedStatement构建如下查询。。。
SELECT * FROM table1 WHERE column1 IN ('foo', 'bar')
而不知道in语句中的字符串数
正在构造类似…的字符串。。。
"'foo', 'bar'"
并将其与ps.setString()一起传递,结果为:
"'foo', 'bar'"
这可能是一件好事,但它使这种解决我问题的方法变得毫无用处。
关于如何在不动态创建查询字符串的情况下将未知数量的值传递到JDBC PreparedStatement中,有什么想法吗?
我倾向于使用一个修改查询的方法来相应地修改查询。这是一个为了简单起见省略了错误处理的基本示例:
public String addDynamicParameters(String query, List<Object> parameters) {
StringBuilder queryBuilder = new StringBuilder(query);
queryBuilder.append("?");
for (int i = 1; i < parameters.size(); i++) {
queryBuilder.append(", ?");
}
queryBuilder.append(") ");
return queryBuilder.toString();
}
public void addParameters(PreparedStatement pstmt, List<Object> parameters) {
int i = 1;
for(Object param : parameters) {
pstmt.setObject(i++, param);
}
}
public void testDynamicParameters() {
String query = "SELECT col3 FROM tableX WHERE col1 = ? AND col2 IN (";
List<Object> parametersForIn = ...;
query = addDynamicParameters(query, parametersForIn);
List<Object> parameters = ...;
PreparedStatement pstmt = ...; //using your Connection object...
parameters.addAll(parametersForIn);
addParameters(pstmt, parameters);
//execute prepared statement...
//clean resources...
}