programing

java.sql.SQLException 매개 변수 인덱스가 범위를 벗어남(1 > 매개 변수 수, 즉 0)

skycolor 2023. 7. 26. 21:44
반응형

java.sql.SQLException 매개 변수 인덱스가 범위를 벗어남(1 > 매개 변수 수, 즉 0)

선택한 콤보 상자를 확인한 후 데이터베이스에 삽입할 수 없습니다.Tomcat에서 다음 오류가 발생합니다.

java.sql.SQLException: 매개 변수 인덱스가 범위를 벗어났습니다(1 > 매개 변수 수, 즉 0).

이것은 어떻게 발생하고 어떻게 해결할 수 있습니까?

다음 중 하나를 호출하면 이 오류가 발생합니다.setXxx()에 대한 방법.PreparedStatementSQL 쿼리 문자열에 자리 표시자가 없는 경우?이를 위하여

예를 들어, 이것은 잘못된 것입니다.

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
// ...

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1); // Fail.
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

자리 표시자를 지정하려면 SQL 쿼리 문자열을 수정해야 합니다.

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
// ...

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

매개 변수 인덱스는 다음으로 시작합니다.1이러한 자리 표시자를 다음과 같이 인용할 필요는 없습니다.

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

그렇지 않으면 SQL 파서가 실제 문자열 값으로 해석하여 자리 표시자를 더 이상 찾을 수 없기 때문에 동일한 예외가 계속 발생합니다.

참고 항목:

이 문제는 jdbc Driver 버전과 관련된 문제입니다.mysql-connector-java-commercial-5.0.3-bin.jar를 사용할 때 이 문제가 발생했지만 최신 드라이버 버전인 mysql-connector-java-5.1.22.jar로 변경했을 때 문제가 해결되었습니다.

언급URL : https://stackoverflow.com/questions/10896151/java-sql-sqlexception-parameter-index-out-of-range-1-number-of-parameters-wh

반응형