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
문자열은 surname
및 name
에 대한 자리 표시자를 사용하여 SQL 쿼리를 올바르게 정의합니다. 그러나 searchPerson
을 statement.executeQuery()
에 직접 전달하는 것이 오류의 원인입니다. executeQuery()
은 매개변수가 이미 설정된 준비된 명령문을 기대합니다. SQL 문자열을 매개변수로 허용하지 않습니다.
올바른 구현:
해결책은 쿼리를 실행하기 전에 매개변수를 올바르게 바인딩하는 것입니다. 매개변수 바인딩 후에는 인수 없이 executeQuery()
메서드를 호출해야 합니다. 수정된 코드는 다음과 같습니다(surnameValue
및 nameValue
가 실제 값을 보유한다고 가정).
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!