티스토리 뷰

JDBC 에서

java.sql.SQLException: 전방향 전용 결과 집합에 부적합한 작업이 수행되었습니다 : first

ResultSet 객체의 first(), previous(), absolute()의 탐색중 만나게 된 에러이다.
이유인즉슨, ResultSet 객체는 기본적으로 후방향 탐색이 우선으로,
쉽게 말하자면, 간단히 next(), last() 메소드처럼 포인트 이동이 후방향으로만 이루어지는 것이다.
이루어지는 것이라고 하면 뭔가 좀 그런것 같다.
어쨌든, ResultSet 객체 자체는 전후방 모든 탐색이 가능하지만.....

보통 ResultSet 객체를 획득할 때, PreparedStatement 객체의 executeQuery()
메소드를 통하여 얻게 되는데, 이 때 PreparedStatement 객체로부터 반환되어지는 
ResultSet 객체는 후방향 탐색만이 가능하도록 되어진 객체이다.

따라서 PreparedStatement 객체를 Connection 객체로부터 얻을 때
사용하는 Connection객체의 preparedStatement() 또는 createStatement() 메서드에
ResultSet 객체의 두 정적 필드 값을 넘겨준다.

ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE

이 두 필드값을 preparedStatement() 또는 createStatement() 메서드에 파라미터값으로 넣어준다.

실제 사용 예는 다음과 같다.

dbConnection = DbConnection.getConnection();
pstmt = conn.prepareStatement(sqlWithFid, ResultSet.TYPE_SCROLL_INSENSITIVE
             ResultSet.CONCUR_UPDATABLE);
rs = pstmt.executeQuery();

이렇게 코드를 구성하고 난 뒤부터는
ResultSet 객체를 임의대로 전, 후방향으로 탐색할 수 있다.






댓글