머리말
자바의 JDBC 클래스에서 ResultSet 객체를 통해 쿼리의 결과를 가져오는 경우, Row 개수와 Column 개수가 필요한 상황이 생각보다 많이 마주하게 된다. 얼핏, 동일한 방법으로 개수를 구할 수 있을 것 같지만, 각 row 및 column의 개수를 구하는 방법은 완전히 다른 방식으로 계산할 수 있다. 본 포스팅에서는 ResultSet 객체에 담겨 있는 데이터의 Row, Column 개수를 반환받는 방법에 대해서 소개하도록 한다.
ResultSet 객체의 Row 개수 계산
Row 개수를 계산하는 방법을 간단히 문자로 표현하자면, 커서의 위치를 제일 뒤로 이동한 뒤 row의 개수를 계산하는 방법으로 설명할 수 있다. 아래의 자바 코드 중 Statement 객체 생성의 메서드 인자값의 의미는 '전방향 전용 결과 집합에 부적합한 작업이 수행되었습니다.'와 같은 에러 메시지를 방지하기 위해 필수로 전달해야 될 인자 값이다. 예제 자바 코드와 ResultSet 객체의 커서를 조작하는 메서드는 아래와 같이 정리할 수 있다.
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 값을 저장
Method | Description |
rs.first() | 커서의 위치를 조회 결과 값의 첫 번째로 이동 |
rs.last() | 커서의 위치를 조회 결과 값의 마지막으로 이동 |
rs.next() | 커서의 위치를 순방향으로 이동 |
rs.previous() | 커서의 위치를 역방향으로 이동 |
rs.getRow() | 커서의 인덱스 값을 조회 |
rs.isFirst() | 커서의 위치가 처음인지 여부 조회 |
rs.isLast() | 커서의 위치가 마지막인지 여부 조회 |
rs.beforeFirst() | 커서의 위치를 가장 처음으로 이동: rs.first() 메서드의 이전 공간으로써 비어있는 공간 |
rs.afterLast() | 커서의 위치를 가장 마지막으로 이동: rs.last() 메서드의 이후 공간으로써 비어있는 공간 |
ResultSet 객체의 Column 개수 계산
Column 개수를 계산하는 방법을 간단히 문자로 표현하자면, ResultSetMetaData 객체를 이용하여 Column의 개수를 반환받는 방법으로 설명할 수 있다. 아래의 자바 코드와 같이 ResultSet 객체로 ResultSetMetaData 객체를 추가로 생성한 뒤, ResultSetMetaData 객체의 getColumnCount 메서드를 활용해서 비교적 간단하게 컬럼의 개수를 반환받을 수 있다. ResultSetMetaData 객체는 ResultSet 결과에 대한 메타 데이터를 관리하는 객체로써 컬럼의 개수 정보도 관리하고 있기 때문에 쉽게 반환받을 수 있다.
ResultSet rs = stmt.excuteQuery(QUERY); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount();
꼬리말
Row 및 Column 개수를 구하는 방법에 대해서 간략히 소개했는데, 굳이 위의 방법을 사용하지 않아도 ResultSet 객체를 원하는 방향으로 반복 수행하면서 개수를 집계해도 얼마든지 값을 구할 수 있다. 하지만, 자신의 프로그램이 컴퓨터/서버의 자원을 불필요하게 낭비하길 원하지 않는다면 본 포스팅에서 소개하는 방법을 사용하는 것이 좋다. 나름의 정성껏 작성한 포스팅이 적게나마 도움이 되길 바라는 마음이며 본 포스팅은 이로써 마무리를 짓도록 한다.
소중한 댓글 (0)