programing

ResultSet#getRow()가 1을 반환할 때 "Current position is after the last row"가 반환됩니다.

goodjava 2022. 12. 30. 17:12

ResultSet#getRow()가 1을 반환할 때 "Current position is after the last row"가 반환됩니다.

MySQL에서ResultSet#getRow()커서 위치가 마지막 행 뒤에 있으면 < 1을 반환합니다.방금 마리아DB로 바꿨어요전화드렸습니다ResultSet#next()그리고 그 이후.ResultSet#getRow(). 결과 세트가 비어 있는 경우ResultSet#getRow()MariaDB의 경우 1을 반환합니다.

MariaDB가 실제로 이렇게 작동한다면 변경해야 할 코드가 많습니다.아니면 제가 잘못하고 있는데 문제는 저에게만 있는 건가요?

ResultSetjava.sql.ResultSetRHEL 7.0의 MariaDB 버전은 10.0.14입니다.Tomcat 8.0.15 및 Java 8에서 mariadb-java-client-1.1.7.jar를 사용하고 있습니다.

MariaDB의 버그입니다.그들의 출처를 보면 다른 사람에게 전화를 걸면next()를 얻을 수 있습니다.2기타 등등.이러한 방법으로 구현됩니다.next()그들의 차림새로CachedResultSet.

public boolean next() throws IOException, QueryException{
    rowPointer++;
    return rowPointer < resultSet.size();
}

그리고 그들의 모습을 보면StreamingResultSet코드, 스트리밍 결과 세트로 전환하면 더 이상 행복하지 않습니다.콜을 하면 예외가 발생하기 때문입니다.getRow().

당신의 코드를 변경해서 그것이 결과를 확인할 것을 조언합니다.next()의지하기보다getRow()JDBC 매뉴얼에 따르면 이는 옵션 방식입니다.이 버그를 MariaDB 개발자에게 보고하여 수정하더라도 결과 세트가 스트리밍 모드로 전환될 정도로 커지면(문의 페치 크기를 변경함으로써) 문제가 발생합니다.또한 구현되지 않은 다른 데이터베이스로 전환한 경우getRow()당신도 비슷한 문제에 봉착할 거예요.

언급URL : https://stackoverflow.com/questions/27037510/current-position-is-after-the-last-row-when-resultsetgetrow-returns-1