Rumah > pangkalan data > tutorial mysql > Mengapakah `statement.executeQuery(searchPerson);` Menyebabkan Ralat Sintaks SQL dalam Penyata Disediakan Java?

Mengapakah `statement.executeQuery(searchPerson);` Menyebabkan Ralat Sintaks SQL dalam Penyata Disediakan Java?

Mary-Kate Olsen
Lepaskan: 2025-01-11 15:22:41
asal
632 orang telah melayarinya

Why Does `statement.executeQuery(searchPerson);` Cause a SQL Syntax Error in Java Prepared Statements?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan