儘管語句正確,JDBC 傳回MySQLSyntaxError 例外
在連接到MyrrSQL 資料庫的「不符遭遇。儘管使用 MySQL Workbench 驗證了語句的正確性,但錯誤仍然存在。
檢查提供的程式碼發現問題在於PreparedStatement 中佔位符 (?) 的使用。這些佔位符應該使用 setXXX() 方法正確設置,而不是出現在傳遞給 executeUpdate() 的 SQL 字串中。
這是修改後的程式碼:
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; }
請注意,executeUpdate( sqlString) 方法只能與 Statement 物件一起使用,而不是與PreparedStatement 物件一起使用。如原程式碼所示錯誤使用會導致語法錯誤。
此外,建議在finally區塊中關閉PreparedStatement,以防止出現異常時資源洩漏。這也適用於 Connection、Statement 和 ResultSet。
以上是為什麼在 Java 應用程式中使用PreparedStatements 時會收到 MySQLSyntaxError 例外狀況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!