>  기사  >  데이터 베이스  >  유효한 INSERT 문을 사용했는데도 JDBC 코드에서 MySQLSyntaxErrorException이 발생하는 이유는 무엇입니까?

유효한 INSERT 문을 사용했는데도 JDBC 코드에서 MySQLSyntaxErrorException이 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 07:14:01339검색

Why does my JDBC code throw a MySQLSyntaxErrorException despite using a valid INSERT statement?

JDBC 예외: 유효한 SQL 문에 MySQLSyntaxError

이 기사에서는 JDBC를 사용하여 데이터를 MySQL 데이터베이스. MySQL Workbench에서 유효한 INSERT 문을 실행했음에도 불구하고 MySQLSyntaxError 예외가 발생했습니다.

근본 원인을 조사하기 위해 코드를 분석해 보겠습니다.

<code class="java">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);
            ... // Execute user query
            PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
            sInserim.setString(1, utente);
            sInserim.setString(2, nome);
            System.out.println(sInserim);
            sInserim.executeUpdate(sqlCommandInserim);
            ... // Close PreparedStatements and ResultSet
        }
        catch(SQLException e){
            e.printStackTrace();
            return false;
        }
    }
    else
        return false;
}</code>

스택 추적 검사:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? , ? , DEFAULT , NULL )' at line 1

이 오류는 SQL 문에 구문 오류가 있음을 나타냅니다. 그러나 INSERT 문은 올바른 것 같습니다.

자세히 조사한 결과,executeUpdate() 메서드가 preparedStatement sInserim 대신 문자열 인수 SQLCommandInserim을 사용하는 것을 알 수 있습니다. 이는 코드의 실수입니다.

해결책:

이 문제를 해결하려면 다음 줄을 바꾸십시오.

<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>

<code class="java">sInserim.executeUpdate();</code>

PreparedStatement에서 ExecuteUpdate()를 호출하면 JDBC는 자리 표시자(?)를 setString() 메서드를 사용하여 설정된 값으로 대체하여 구문 오류를 방지합니다.

추가 고려 사항:

예외 발생 시 리소스 누출을 방지하기 위해 finally 블록을 사용하여 모든 데이터베이스 개체(PreparedStatements, Connections, 명령문 및 ResultSets)를 닫는 것이 좋습니다.

위 내용은 유효한 INSERT 문을 사용했는데도 JDBC 코드에서 MySQLSyntaxErrorException이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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