> 데이터 베이스 > MySQL 튜토리얼 > `statement.executeQuery(searchPerson);`이 Java 준비 문에서 SQL 구문 오류를 일으키는 이유는 무엇입니까?

`statement.executeQuery(searchPerson);`이 Java 준비 문에서 SQL 구문 오류를 일으키는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-11 15:22:41
원래의
632명이 탐색했습니다.

Why Does `statement.executeQuery(searchPerson);` Cause a SQL Syntax Error in Java Prepared Statements?

Java 준비 문: '?'로 인한 SQL 구문 오류 문제 해결 자리 표시자

Java의 준비된 문을 사용하면 종종 부적절한 자리 표시자(?) 사용으로 인해 발생하는 "SQL 구문 오류" 메시지가 발생합니다. 일반적인 시나리오를 살펴보겠습니다.

다음 Java 코드 조각은 잘못된 접근 방식을 보여줍니다.

<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?";
statement.executeQuery(searchPerson); </code>
로그인 후 복사

searchPerson 문자열은 surnamename에 대한 자리 표시자를 사용하여 SQL 쿼리를 올바르게 정의합니다. 그러나 searchPersonstatement.executeQuery()에 직접 전달하는 것이 오류의 원인입니다. executeQuery()은 매개변수가 이미 설정된 준비된 명령문을 기대합니다. SQL 문자열을 매개변수로 허용하지 않습니다.

올바른 구현:

해결책은 쿼리를 실행하기 전에 매개변수를 올바르게 바인딩하는 것입니다. 매개변수 바인딩 후에는 인수 없이 executeQuery() 메서드를 호출해야 합니다. 수정된 코드는 다음과 같습니다(surnameValuenameValue가 실제 값을 보유한다고 가정).

<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?";
PreparedStatement statement = connection.prepareStatement(searchPerson);
statement.setString(1, surnameValue);
statement.setString(2, nameValue);
ResultSet rs = statement.executeQuery(); // Execute without additional parameters
// Process the ResultSet (rs) here</code>
로그인 후 복사

이 수정된 코드는 먼저 PreparedStatement 객체를 생성한 다음 setString()을 사용하여 매개변수 값을 설정하고 마지막으로 SQL 문자열을 다시 전달하지 않고 executeQuery()를 사용하여 쿼리를 실행합니다. 이렇게 하면 데이터베이스가 자리 표시자를 올바르게 해석하고 구문 오류를 방지할 수 있습니다.

위 내용은 `statement.executeQuery(searchPerson);`이 Java 준비 문에서 SQL 구문 오류를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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