Pertanyaan Menggunakan variabel bukan indeks parameter dengan pernyataan disiapkan JDBC


Dalam banyak bahasa pemrograman, hal seperti ini dimungkinkan untuk pernyataan yang disiapkan:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ${name}");
statement.setString("name", "IBM");

Tapi tidak dengan java.sql.PreparedStatement. Di Java kita harus menggunakan indeks parameter:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ?");
statement.setString(1, "IBM");

Apakah ada solusi untuk bekerja dengan variabel string seperti pada contoh pertama? Apakah "$ {. *}" Tidak digunakan di tempat lain dalam bahasa SQL, atau apakah ada konflik? Karena itu saya akan menerapkannya sendiri (mengurai string SQL dan mengganti setiap variabel dengan "?" Dan kemudian melakukannya dengan cara Java).

Salam, Kai


32
2017-07-08 12:48


asal


Jawaban:


Standard JDBC PreparedStatements tidak memiliki kemampuan ini. Spring JDBC menyediakan fungsionalitas ini NamedParameterJdbcTemplate.


26
2017-07-08 13:07



Seperti kd304 disebutkan dalam komentar untuk posting saya, ini adalah solusi yang sangat bagus jika Anda tidak ingin memasukkan perpustakaan pihak ke-3 lain (seperti Spring) ke dalam proyek Anda: Javaworld Artikel: Dinamakan Parameter untuk PreparedStatement


16
2017-07-08 21:17



Menggunakan PreparedStatement mentah, ini tidak mungkin, seperti yang Anda katakan. Mungkin dengan CallableStatement, tapi itu membutuhkan prosedur yang tersimpan daripada hanya pernyataan SQL.

Lapisan ORM seperti Hibernate juga menyediakan penggantian parameter bernama, dan Hibernate juga memungkinkan Anda untuk mengeksekusi SQL asli, melewati fungsi pemetaan ATAU sepenuhnya.

Jadi jika Anda benar-benar ingin menggunakan parameter bernama, Anda dapat menggunakan Hibernate sebagai cara untuk melakukan ini; Anda hanya akan menggunakan sebagian kecil dari fungsinya.


5
2017-07-08 13:05