문제:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!