Rumah >pangkalan data >tutorial mysql >Mengapa Kod Java Saya Mendapat Pengecualian MySQLSyntaxError Walaupun Menggunakan PreparedStatement?
JDBC Mengembalikan Pengecualian MySQLSyntaxError Walaupun Penyataan Betul
Apabila cuba memasukkan baris baharu ke dalam jadual MySQL, aplikasi Java menemui Pengecualian MySQLSyntaxError Exception. Setelah meneliti pernyataan SQL, ia kelihatan betul dari segi sintaksis. Walau bagaimanapun, apabila dilaksanakan secara terus menggunakan MySQL Workbench, pernyataan itu berjaya.
Kod yang dimaksudkan menggunakan PreparedStatement untuk melaksanakan pernyataan INSERT, seperti yang dilihat di bawah:
<code class="java">PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, utente); sInserim.setString(2, nome); sInserim.executeUpdate(sqlCommandInserim);</code>
Pengecualian yang dihadapi ialah:
<code class="text">com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '? , ? , DEFAULT , NULL )' at line 1</code>
Setelah diperiksa lebih dekat, didapati bahawa pemegang tempat (?) tidak digantikan dengan betul oleh PreparedStatement. Ini terbukti daripada baris berikut:
<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
Kaedah executeUpdate() sedang digunakan dengan rentetan SQL mentah sebagai argumen, dan bukannya menggunakan objek PreparedStatement dengan nilai yang ditetapkan.
Untuk membetulkan isu, kod telah diubah suai kepada:
<code class="java">sInserim.executeUpdate();</code>
Dengan menggunakan executeUpdate() tanpa argumen rentetan SQL, nilai PreparedStatement digunakan secara automatik, menyelesaikan Pengecualian MySQLSyntaxError.
Nota:
Walaupun tidak berkaitan secara langsung dengan masalah yang dinyatakan, adalah disyorkan untuk menutup PreparedStatement (dan sebarang sumber lain, seperti Connection, Statement dan ResultSet) dalam blok akhirnya ke mengelakkan kebocoran sumber sekiranya berlaku pengecualian.
Atas ialah kandungan terperinci Mengapa Kod Java Saya Mendapat Pengecualian MySQLSyntaxError Walaupun Menggunakan PreparedStatement?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!