JDBC Mengembalikan Pengecualian MySQLSyntaxError Walaupun Penyataan Betul
Apabila melaksanakan pernyataan INSERT dalam aplikasi Java yang menyambung ke pangkalan data MySQL, MySQLSyntaxError Exception ialah dihadapi. Walaupun mengesahkan ketepatan pernyataan menggunakan MySQL Workbench, ralat berterusan.
Memeriksa kod yang disediakan mendedahkan isu ini terletak pada penggunaan ruang letak (?) dalam PreparedStatement. Pemegang tempat ini harus ditetapkan dengan betul menggunakan kaedah setXXX() dan bukannya muncul dalam rentetan SQL yang diluluskan untuk executeUpdate().
Berikut ialah kod yang diubah suai:
public static boolean aggiungiElem(String nome, GrafoGenerico g){ if(connessioneAperta()){ try{ String sqlCommandUser="SELECT USER()"; String sqlCommandInserim="INSERT INTO salvataggi VALUES ( ?, ?, DEFAULT , NULL );"; PreparedStatement sUser=conn.prepareStatement(sqlCommandUser); ResultSet risultatiUtente=sUser.executeQuery(); String utente = null; while(risultatiUtente.next()){ utente=risultatiUtente.getString(1); } sUser.close(); PreparedStatement sInserim=conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, utente); sInserim.setString(2, nome); //sInserim.setObject(3,g); System.out.println(sInserim.toString()); sInserim.executeUpdate(); // Execute the prepared statement without the SQL string sInserim.close(); return true; } catch(SQLException e){ // Log the exception and handle appropriately } finally { if (sInserim != null) { sInserim.close(); } } } else return false; }
Perhatikan bahawa executeUpdate( sqlString) hanya boleh digunakan dengan objek Pernyataan, bukan objek PreparedStatement. Menggunakannya secara tidak betul seperti yang ditunjukkan dalam kod asal akan mengakibatkan ralat sintaks.
Selain itu, disyorkan untuk menutup PreparedStatement dalam blok akhirnya untuk mengelakkan kebocoran sumber sekiranya berlaku pengecualian. Ini terpakai pada Connection, Statement dan ResultSet juga.
Atas ialah kandungan terperinci Mengapa saya mendapat Pengecualian MySQLSyntaxError apabila menggunakan PreparedStatements dalam aplikasi Java saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!