使用带有IN子句参数的PreparedStatement
问题:
如何填充preparedStatement JDBC 中的语句在 IN 子句中包含参数列表?当事先不知道参数列表时,这一点尤其重要。
解决方案:
要动态构造具有多个值的 IN 子句,请按照以下步骤操作:
var stmt = String.format("select * from test where field in (%s)", values.stream() .map(v -> "?") .collect(Collectors.joining(", ")));
PreparedStatement pstmt = connection.prepareStatement(stmt);
int index = 1; for (Object o : values) { pstmt.setObject(index++, o); // Replace with appropriate data type }
这种做法允许您动态处理多个或未知参数。
使用 StringBuilder 的替代解决方案:
List<String> 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 + ")";
按照与上述相同的步骤准备语句并设置值.
以上是如何在 JDBC 中使用带有动态 IN 子句参数的PreparedStatements?的详细内容。更多信息请关注PHP中文网其他相关文章!