Dalam pertanyaan SQL, klausa IN digunakan untuk memadankan nilai dengan koleksi tertentu. Apabila menggunakan Java dan JDBC, parameter parameter dalam klausa IN adalah penting untuk keselamatan dan prestasi.
Adakah kaedah parameterisasi langsung wujud?
Malangnya, JDBC tidak menyediakan cara untuk secara langsung parameter nilai dalam klausa IN. Walau bagaimanapun, sesetengah pemacu JDBC mungkin menyokong PreparedStatement#setArray().
Penyelesaian komprehensif
Untuk menyelesaikan masalah ini, anda boleh mencipta kaedah pembantu untuk menjana ruang letak dan menetapkan nilai dalam gelung. Begini caranya:
Contoh penggunaan:
<code class="language-java">import java.util.*; import java.sql.*; 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()); // 执行查询... } return entities; }</code>
Nota: Sesetengah pangkalan data mempunyai had pada bilangan nilai yang dibenarkan dalam klausa IN. Sebagai contoh, Oracle mengehadkan ini kepada 1000 item.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memeterai Klausa IN dengan Berkesan dengan JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!