programing

rs.last()가 전달 전용 결과 집합에 대해 잘못된 작업을 제공함: last

sourcejob 2023. 6. 13. 22:14
반응형

rs.last()가 전달 전용 결과 집합에 대해 잘못된 작업을 제공함: last

다음과 같이 설정된 결과의 행 수를 가져오려고 합니다.

rs.last();
int row_count = rs.getRow();

하지만 나는.Invalid operation for forward only resultset : last오류. 결과 집합이 Oracle 10g 데이터베이스에서 데이터를 가져오는 중입니다.

연결을 설정하는 방법은 다음과 같습니다.

    Class.forName("oracle.jdbc.driver.OracleDriver");
    String connectionString = "jdbc:oracle:thin:@" + oracle_ip_address + ":" + oracle_db_port + ":" + oracle_db_sid;
    Connection conn = DriverManager.getConnection(connectionString, oracle_db_username, oracle_db_password);

ResultSet.last()및 기타 "절대적으로 정렬된" 쿼리 작업은 결과 집합을 스크롤할 수 있는 경우에만 사용할 수 있습니다. 그렇지 않으면 전달 전용 결과 집합을 통해 하나씩만 반복할 수 있습니다.

다음 예제(javadocs에서)는 스크롤 가능한 파일을 만드는 방법을 보여줍니다.ResultSet.

Statement stmt = con.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY
);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

스크롤 가능한 쿼리를 사용하면 성능에 영향을 미칩니다.이 특별한 목적이 있다면,ResultSet마지막 값을 가져오는 것입니다. 쿼리를 수정하여 해당 결과만 반환하십시오.

PreparedStatement ps = conn.prepareStatement ("SELECT * FROM
         EMPLOYEE_TABLE WHERE LASTNAME = ?" ,
         ResultSet.TYPE_SCROLL_INSENSITIVE , 
         ResultSet.CONCUR_UPDATABLE ,
         ResultSet.HOLD_CURSOR_OVER_COMMIT) ;

준비된 문의 경우 최소한 다음에 대한 유형과 동시 모드를 모두 지정해야 합니다.last()그리고.isLast()일하기 위해.

String rowCount = "SELECT COUNT(*) as numberOfRows FROM (SELECT * FROM names)";
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery(rowCount);
int lastRow = rs.getInt("numberOfRows");
System.out.println(lastRow);

대신에SELECT * FROM names쿼리를 사용합니다.

언급URL : https://stackoverflow.com/questions/9007051/rs-last-gives-invalid-operation-for-forward-only-resultset-last

반응형