JDBC 参数化 IN 子句:一种高效的方法
处理 IN 子句查询时,例如 SELECT * FROM MYTABLE WHERE MYCOL in ( ?),参数化参数确保了安全性和效率。虽然 JDBC 不提供直接的解决方案,但某些驱动程序可能支持PreparedStatement#setArray()。
用于参数化的帮助方法
在没有直接支持的情况下,您可以可以利用辅助方法为 IN 子句生成占位符并动态设置值。
示例实现
考虑以下数据访问方法:
<code class="java">private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)"; public List<Entity> find(Set<Long> ids) throws SQLException { List<Entity> 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; }</code>
关键注意事项
以上是如何有效地参数化 JDBC 中的 IN 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!