Rumah >pangkalan data >tutorial mysql >MySQL PreparedStatement: Mengapa `executeQuery()` Gagal dengan Ralat Sintaks?
Pernyataan Disediakan MySQL: Menyelesaikan executeQuery()
Ralat Sintaks
Isu biasa apabila menggunakan PreparedStatement
Java dengan MySQL melibatkan ralat SQLException
yang menunjukkan masalah sintaks SQL berhampiran pemegang tempat (?
). Ini selalunya timbul daripada melaksanakan kenyataan yang salah.
Masalahnya:
Kod Java yang menggunakan PreparedStatement
mungkin membuang pengecualian yang serupa dengan:
<code>... you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?'</code>
Pendekatan yang Salah:
Ralat biasanya berlaku apabila cuba melaksanakan PreparedStatement
menggunakan executeQuery()
dengan hujah rentetan (cth., pertanyaan SQL itu sendiri):
<code class="language-java">statement.executeQuery(searchPerson); // Incorrect</code>
Ini menganggap searchPerson
sebagai rentetan SQL literal, mengabaikan ruang letak yang ditetapkan dalam PreparedStatement
.
Penyelesaian yang Betul:
Kuncinya adalah untuk melaksanakan PreparedStatement
tanpa sebarang parameter yang dihantar kepada executeQuery()
:
<code class="language-java">statement.executeQuery(); // Correct</code>
Parameter sudah terikat pada PreparedStatement
menggunakan setString()
, setInt()
, dsb., sebelum panggilan executeQuery()
. Menyediakan rentetan pertanyaan sekali lagi sebagai hujah mengatasi pengikatan ini dan membawa kepada ralat sintaks. executeQuery()
hanya melaksanakan pernyataan dengan parameter pra-terikat.
Atas ialah kandungan terperinci MySQL PreparedStatement: Mengapa `executeQuery()` Gagal dengan Ralat Sintaks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!