Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyamakan Klausa IN dengan Cekap dalam JDBC?
Parameterisasi klausa IN dalam JDBC: adakah terdapat kaedah langsung?
Dalam JDBC, sukar untuk meparameterkan klausa IN dengan cekap. Struktur pertanyaan biasa adalah seperti berikut:
<code class="language-sql">SELECT * FROM MYTABLE WHERE MYCOL in (?)</code>
Untuk menyuntik nilai secara dinamik ke dalam klausa seperti ini, kami memerlukan kaedah mudah yang berfungsi merentas pelbagai pangkalan data tanpa mengubah SQL.
Malangnya, JDBC tidak menyediakan penyelesaian asli untuk masalah ini. Walau bagaimanapun, sesetengah pemandu mungkin menyokong PreparedStatement#setArray() untuk klausa IN.
Kaedah alternatif
Sebagai alternatif, kami boleh menggunakan kaedah pembantu untuk mencipta ruang letak dan menetapkan nilai parameter secara berulang. Berikut ialah pelaksanaan:
<code class="language-java">public static String preparePlaceHolders(int length) { return String.join(",", Collections.nCopies(length, "?")); } public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException { for (int i = 0; i < values.length; i++) { preparedStatement.setObject(i + 1, values[i]); } }</code>
Contoh penggunaan:
```java String akhir statik peribadi SQL_FIND = "PILIH id, nama, nilai DARI entiti WHERE id IN (%s)";Senarai awam } Atas ialah kandungan terperinci Bagaimana untuk Menyamakan Klausa IN dengan Cekap dalam JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!<code>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>
<code>
<p><strong>注意事项</strong></p>
- 请注意,某些数据库限制了IN子句中允许的值的数量。
- 此方法利用PreparedStatement接口,确保跨数据库兼容性。
- 还必须考虑数据库特定的优化,例如使用数组或批量更新。</code>