JDBC가 올바른 명령문에도 불구하고 MySQLSyntaxError 예외를 반환함
MySQL 데이터베이스에 연결하는 Java 애플리케이션에서 INSERT 문을 실행할 때 MySQLSyntaxError 예외는 다음과 같습니다. 마주쳤다. MySQL Workbench를 사용하여 문의 정확성을 검증했음에도 불구하고 오류가 계속 발생합니다.
제공된 코드를 살펴보면 문제가 preparedStatement 내의 자리 표시자(?) 사용에 있음을 알 수 있습니다. 이러한 자리 표시자는 ExecuteUpdate()에 전달된 SQL 문자열에 표시되지 않고 setXXX() 메서드를 사용하여 올바르게 설정되어야 합니다.
수정된 코드는 다음과 같습니다.
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) 메서드는PreparedStatement 개체가 아닌Statement 개체에만 사용해야 합니다. 원본 코드와 같이 잘못 사용하면 구문 오류가 발생할 수 있습니다.
또한 예외 발생 시 리소스 누출을 방지하기 위해 finally 블록 내에서 ReadyStatement를 닫는 것이 좋습니다. 이는 Connection, State, ResultSet에도 적용됩니다.
위 내용은 Java 애플리케이션에서 ReadyStatements를 사용할 때 MySQLSyntaxError 예외가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!