>Java >java지도 시간 >내 preparedstatement로 인해 MySQL에서 'SQL 구문에 오류가 발생했습니다' 예외가 발생하는 이유는 무엇입니까?

내 preparedstatement로 인해 MySQL에서 'SQL 구문에 오류가 발생했습니다' 예외가 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-06 19:24:12847검색

Why Does My PreparedStatement Result in a

PreparedStatement를 사용할 때 SQL 구문에 오류가 있습니다.

문제:

PreparedStatement를 사용하여 쿼리를 실행할 때 Java에서는 다음 오류 메시지와 함께 MySQLSyntaxErrorException이 발생합니다. "SQL 구문에 오류가 있습니다... 근처 '? 또는 MemberName = ?'."

코드:

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);

원인:

구문 오류는 다음과 같습니다. SQL 쿼리의 물음표(?)로 인해 발생합니다. MySQL은 이를 매개변수 자리 표시자가 아닌 문자 그대로의 물음표로 해석합니다. 이로 인해 잘못된 SQL 구문이 발생합니다.

해결책:

문제를 해결하려면 SQL 쿼리의 물음표를 명명된 매개 변수로 바꾸세요. 이렇게 하면 preparedStatement가 매개변수 값을 올바르게 바인딩할 수 있습니다.

String query = "select MemberID, MemberName from members where MemberID = :member_id or MemberName = :member_name";

Java 코드에서 preparedStatement#setString 메서드를 사용하여 명명된 매개변수를 설정합니다.

s.setString("member_id", "2");
s.setString("member_name", "zen");

또는 s.executeQuery(query) 대신 인수 없는 s.executeQuery() 메서드를 사용하여 준비된 쿼리를 원본으로 재정의하는 것을 방지할 수 있습니다. query.

리소스 누수:

제공된 코드에는 리소스 누수 문제가 있습니다. 리소스 고갈을 방지하려면 Connection, State 및 ResultSet 객체를 finally 블록에서 닫아야 합니다.

위 내용은 내 preparedstatement로 인해 MySQL에서 'SQL 구문에 오류가 발생했습니다' 예외가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.