정확한 설명에도 불구하고 JDBC가 MySQLSyntaxError 예외를 반환함
MySQL 테이블에 새 행을 삽입하려고 시도할 때 Java 애플리케이션에서 MySQLSyntaxError 예외가 발생했습니다. SQL 문을 조사한 결과 구문이 올바른 것으로 나타났습니다. 그러나 MySQL Workbench를 사용하여 직접 실행하면 문이 성공했습니다.
문제의 코드는 아래와 같이 INSERT 문을 실행하기 위해 preparedStatement를 사용했습니다.
<code class="java">PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, utente); sInserim.setString(2, nome); sInserim.executeUpdate(sqlCommandInserim);</code>
발생한 예외는 다음과 같습니다.
<code class="text">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</code>
자세히 살펴보니 자리 표시자(?)가 ReadyStatement로 제대로 대체되지 않은 것으로 나타났습니다. 이는 다음 줄에서 분명하게 나타납니다.
<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
PreparedStatement 개체를 설정된 값과 함께 사용하는 대신 원시 SQL 문자열을 인수로 사용하여 ExecutionUpdate() 메서드가 호출되었습니다.
문제를 해결하기 위해 코드를 다음과 같이 수정했습니다.
<code class="java">sInserim.executeUpdate();</code>
SQL 문자열 인수 없이 ExecutionUpdate()를 사용하면 preparedStatement의 값이 자동으로 사용되어 MySQLSyntaxError 예외가 해결됩니다.
참고:
설명된 문제와 직접적인 관련은 없지만 finally 블록에서 preparedStatement(및 연결, 명령문, 결과 집합과 같은 기타 리소스)를 닫는 것이 좋습니다. 예외 발생 시 리소스 유출을 방지합니다.
위 내용은 ReadyStatement를 사용함에도 불구하고 내 Java 코드에서 MySQLSyntaxError 예외가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!