JDBC 参数化 IN 子句:一种高效的方法
处理 IN 子句查询时,例如 SELECT * FROM MYTABLE WHERE MYCOL in ( ?),参数化参数确保了安全性和效率。虽然 JDBC 不提供直接的解决方案,但某些驱动程序可能支持PreparedStatement#setArray()。
用于参数化的帮助方法
如果没有直接支持,您可以可以利用辅助方法为 IN 子句生成占位符并动态设置值。
示例实现
考虑以下数据访问方法:
private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)";
public List find(Set ids) throws SQLException {
List entities = new ArrayList();
String sql = String.format(SQL_FIND, preparePlaceHolders(ids.size()));
try (
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
) {
setValues(statement, ids.toArray());
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
entities.add(map(resultSet));
}
}
}
return entities;
}
关键注意事项
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3