> 데이터 베이스 > MySQL 튜토리얼 > ReadyStatement를 사용함에도 불구하고 내 Java 코드에서 MySQLSyntaxError 예외가 발생하는 이유는 무엇입니까?

ReadyStatement를 사용함에도 불구하고 내 Java 코드에서 MySQLSyntaxError 예외가 발생하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-31 00:35:30
원래의
338명이 탐색했습니다.

Why Does My Java Code Get a MySQLSyntaxError Exception Despite Using a PreparedStatement?

정확한 설명에도 불구하고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿