Pernyataan Disediakan Java: Menyelesaikan Masalah Ralat Sintaks SQL dengan '?' Pemegang tempat
Menggunakan pernyataan Java yang disediakan selalunya membawa kepada mesej "ralat sintaks SQL", yang sering berpunca daripada penggunaan pemegang tempat (?
) yang tidak betul. Mari kita periksa senario biasa:
Coretan kod Java berikut menunjukkan pendekatan yang salah:
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; statement.executeQuery(searchPerson); </code>
Rentetan searchPerson
dengan betul mentakrifkan pertanyaan SQL dengan ruang letak untuk surname
dan name
. Walau bagaimanapun, menghantar searchPerson
terus ke statement.executeQuery()
ialah punca ralat. executeQuery()
menjangkakan kenyataan yang disediakan sudah disediakan dengan parameternya; ia tidak menerima rentetan SQL sebagai parameter.
Pelaksanaan yang Betul:
Penyelesaian terletak pada mengikat parameter dengan betul sebelum melaksanakan pertanyaan. Kaedah executeQuery()
hendaklah dipanggil tanpa sebarang hujah selepas pengikatan parameter. Kod yang diperbetulkan akan kelihatan seperti ini (dengan andaian surnameValue
dan nameValue
memegang nilai sebenar):
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; PreparedStatement statement = connection.prepareStatement(searchPerson); statement.setString(1, surnameValue); statement.setString(2, nameValue); ResultSet rs = statement.executeQuery(); // Execute without additional parameters // Process the ResultSet (rs) here</code>
Kod yang disemak ini mula-mula mencipta objek PreparedStatement
, kemudian menetapkan nilai parameter menggunakan setString()
, dan akhirnya melaksanakan pertanyaan menggunakan executeQuery()
tanpa menghantar rentetan SQL sekali lagi. Ini memastikan pangkalan data mentafsir ruang letak dengan betul dan mengelakkan ralat sintaks.
Atas ialah kandungan terperinci Mengapakah `statement.executeQuery(searchPerson);` Menyebabkan Ralat Sintaks SQL dalam Penyata Disediakan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!