Rumah  >  Artikel  >  pangkalan data  >  Mengapa Kod Java Saya Mendapat Pengecualian MySQLSyntaxError Walaupun Menggunakan PreparedStatement?

Mengapa Kod Java Saya Mendapat Pengecualian MySQLSyntaxError Walaupun Menggunakan PreparedStatement?

Susan Sarandon
Susan Sarandonasal
2024-10-31 00:35:30252semak imbas

Why Does My Java Code Get a MySQLSyntaxError Exception Despite Using a 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!

Kenyataan:
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