>  기사  >  데이터 베이스  >  Java 애플리케이션에서 ReadyStatements를 사용할 때 MySQLSyntaxError 예외가 발생하는 이유는 무엇입니까?

Java 애플리케이션에서 ReadyStatements를 사용할 때 MySQLSyntaxError 예외가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 07:38:02726검색

Why am I getting a MySQLSyntaxError Exception when using PreparedStatements in my Java application?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.