자바의 JDBC 클래스에서 ResultSet 객체를 통해 쿼리의 결과를 가져오는 경우, Row 개수와 Column 개수가 필요한 경우가 생각보다 많이 발생한다. 각각의 정보를 구하는 방법은 두가지 방법으로 서로 상이하며 그 방법을 아래와 같이 정리한다.

 

 

 

※ ResultSet 객체의 Row 개수 계산: 커서의 위치를 제일 뒤로 이동한 뒤 row의 개수를 계산
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT COL_01, COL_02 FROM WOOKOA_TABLE");
rs.last(); //커서의 위치를 제일 뒤로 이동
int rowCount = rs.getRow(); //현재 커서의 Row Index 값을 저장

 

위의 방법 중 Statement 객체생성 메소드의 인자값 'ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE'의 의미는 "전방향 전용 결과 집합에 부적합한 작업이 수행되었습니다"와 같은 에러를 방지하기 위해 필수로 넘겨주어야 할 파라미터다.

 

- ResultSet 객체의 커서를 조작하는 메소드는 아래와 같이 정리할 수 있다.

 rs.first()

 커서의 위치를 조회 결과 값의 첫번째로 이동

 rs.last()

 커서의 위치를 조회 결과 값의 마지막으로 이동

 rs.next()

 커서의 위치를 순방향으로 이동

 rs.previous()

 커서의 위치를 역방향으로 이동

 rs.getRow()

 커서의 인덱스 값을 조회

 rs.isFirst()

 커서의 위치가 처음인지 여부 조회

 rs.isLast()

 커서의 위치가 마지막인지 여부 조회

 rs.beforeFirst()

 커서의 위치를 가장 처음으로 이동: rs.first() 메소드의 이전 공간으로써 비어있는 공간

 rs.afterLast()

 커서의 위치를 가장 마지막으로 이동: rs.last() 메소드의 이후 공간으로써 비어있는 공간

 

 

※ ResultSet 객체의 Column 개수 계산: ResultSetMetaData 객체를 이용하여 Column의 개수를 계산

ResultSet rs = stmt.excuteQuery(QUERY);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();

 

위의 방법과 같이 ResultSet 객체로 ResultSetMetaData 객체를 생성한 뒤, ResultSetMetaData 객체의 getColumnCount 메소드를 활용해서 비교적 간단하게 컬럼의 개수를 구할 수 있다.

 

 

 


  1. 국비생 2019.07.26 09:54
    ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE
    다른곳에서 코드 봐도 이게 이해가 안갔었는데 설명 해주셔서 감사합니다.

Private comment