JDBC gibt trotz korrekter Anweisung eine MySQLSyntaxError-Ausnahme zurück
Beim Ausführen einer INSERT-Anweisung in einer Java-Anwendung, die eine Verbindung zu einer MySQL-Datenbank herstellt, tritt eine MySQLSyntaxError-Ausnahme auf angetroffen. Obwohl die Richtigkeit der Anweisung mithilfe von MySQL Workbench überprüft wurde, bleibt der Fehler weiterhin bestehen.
Eine Untersuchung des bereitgestellten Codes zeigt, dass das Problem in der Verwendung von Platzhaltern (?) innerhalb der PreparedStatement liegt. Diese Platzhalter sollten mit den setXXX()-Methoden ordnungsgemäß festgelegt werden, anstatt in der anexecuteUpdate() übergebenen SQL-Zeichenfolge zu erscheinen.
Hier ist der geänderte Code:
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; }
Beachten Sie, dassexecuteUpdate( Die Methode „sqlString“ sollte nur mit Statement-Objekten verwendet werden, nicht mit PreparedStatement-Objekten. Eine falsche Verwendung, wie im Originalcode gezeigt, würde zu einem Syntaxfehler führen.
Darüber hinaus wird empfohlen, das PreparedStatement innerhalb eines final-Blocks zu schließen, um im Falle von Ausnahmen einen Ressourcenverlust zu verhindern. Dies gilt auch für Connection, Statement und ResultSet.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich eine MySQLSyntaxError-Ausnahme, wenn ich PreparedStatements in meiner Java-Anwendung verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!