JDBC 參數化IN 子句:一種高效率的方法
處理IN 子句查詢時,例如SELECT * FROM MYTABLE WHERE MYCOL在 ( ?),參數化參數確保了安全性和效率。雖然 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中文網其他相關文章!