Rumah >Java >javaTutorial >Ralat Sintaks PreparedStatement MySQL: Mengapakah `executeQuery()` Gagal dengan `?` Pemegang tempat?
Ralat Sintaks MySQL: Memahami Sintaks PreparedStatement
Kod Java anda menggunakan PreparedStatement untuk melaksanakan pertanyaan menghadapi ralat sintaks MySQL (ralat nombor 1064). Ralat ini biasanya dilemparkan apabila terdapat isu dengan sintaks SQL itu sendiri.
Mengenal pasti Sumber Ralat:
Kod yang disediakan menunjukkan bahawa anda cuba untuk laksanakan pertanyaan yang mengandungi ruang letak yang diwakili oleh "?". MySQL tidak mentafsirkan "?" aksara sebagai pemegang tempat dan sebaliknya menganggapnya sebagai sebahagian daripada pernyataan SQL.
Penyelesaian: Menggunakan Kaedah Argumentless executeQuery()
Untuk menyelesaikan isu, anda perlu menggunakan kaedah executeQuery() pernyataan yang disediakan tanpa menyatakan rentetan pertanyaan sebagai argumen.
PreparedStatement s = conn.prepareStatement(query); s.setInt(1, 2); s.setString(2, "zen"); ResultSet rs = s.executeQuery(); // Correct syntax
Dengan meninggalkan rentetan pertanyaan dalam executeQuery(), anda membenarkan pernyataan yang disediakan untuk melaksanakan pertanyaan yang ditakrifkan sebelum ini dengan nilai parameter yang disediakan.
Awas : Kebocoran Sumber
Kod anda pada masa ini tidak mempunyai pengendalian peruntukan sumber yang betul dan deallocation. Adalah disyorkan untuk menggunakan simpulan bahasa JDBC untuk menutup semua sumber yang diperoleh (Sambungan, Penyata, ResultSet) dalam blok akhirnya blok cuba. Jika tidak, aplikasi anda mungkin kehabisan sumber pangkalan data dari semasa ke semasa, membawa kepada ketidakstabilan.
Atas ialah kandungan terperinci Ralat Sintaks PreparedStatement MySQL: Mengapakah `executeQuery()` Gagal dengan `?` Pemegang tempat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!