> Java > java지도 시간 > Java의 preparedStatement에서 '?' 근처에서 MySQL 구문 오류가 발생하는 이유는 무엇입니까?

Java의 preparedStatement에서 '?' 근처에서 MySQL 구문 오류가 발생하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-01 02:31:09
원래의
175명이 탐색했습니다.

Why Does My PreparedStatement in Java Throw a MySQL Syntax Error Near

PreparedStatement 질문 관련 MySQL 구문 오류

Java에서 ReadyStatement를 사용하여 쿼리를 실행하려고 하면 "?" 근처에 구문 오류를 나타내는 오류가 발생합니다. 예외는 다음과 같습니다.

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 '? or MemberName = ?' at line 1
로그인 후 복사

코드 조각

String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?";
Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(query); // Fail!
로그인 후 복사

문제 해결

MySQL이 "?"를 인식하지 못하기 때문에 오류가 발생합니다. SQL 쿼리에서 자리 표시자로 사용됩니다. 이는 다음 호출로 인해 발생합니다.

rs = s.executeQuery(query); // Fail!
로그인 후 복사

인수 없이 preparedStatement#executeQuery를 사용하는 대신 원래 쿼리 문자열이 전달되어 준비된 문을 재정의합니다.

문제를 해결하려면 , preparedStatement의 excuteQuery 메소드는 인수 없이 호출되어야 합니다:

rs = s.executeQuery(); // OK!
로그인 후 복사

Resource 누출

원래 문제와는 관련이 없지만 코드에서 리소스가 누출됩니다. 이를 방지하려면 JDBC 관용어를 사용하여 리소스를 닫아야 합니다.

try {
    // Acquire resources here
} catch (Exception e) {
    // Handle exception
} finally {
    // Close resources here
}
로그인 후 복사

위 내용은 Java의 preparedStatement에서 '?' 근처에서 MySQL 구문 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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