오늘도 자바랑 오라클과 씨름을 합니다-_-;

삽질하던 중에 검색 결과에 대한 레코드 수가 필요했습니다. 그래서 JAVA API를 뒤지고 있는데 getRow() 라는 메소드가 ResultSet클래스에 있는 겁니다. 아... 이거를 쓰면 수를 리턴하는구나 하고 사용했습니다.

그래서 동적 할당을 getRow() 수만큼 해서 받았습니다. 그런데 of out array 어쩌네 하면서 배열의 범위를 넘었네 그럽니다. 디버깅해보니 executeQuery 하자마자 getRow를 하면 0을 받아옵니다-_-;

그렇습니다. 이눔은 현재 가리키고 있는 곳까지의 수만 받아옵니다. 그래서 맨 끝으로 보내야합니다.

ResultSet클래스의 메소드 중에 last()가 있습니다. 맨 끝으로 보내고, 다시 처음으로 보내서 검색하면 되겠구나 라는 생각에
[code]
rs = stmt.executeQuery("select * from USERS");
rs.last();
int rowCount = rs.getRow();
rs.beforeFirst();
[/code]
위와 같이 하면 오라클에서는
"전방향 전용 결과 집합에 부적합한 작업이 수행되었습니다"
라는 메시지를 띄우게 됩니다.

찾아본 결과 createStatement에 옵션을 주어야 하더군요.
statement생성
[code]
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
            ResultSet.CONCUR_UPDATABLE);

rs = stmt.executeQuery("select * from USERS");
rs.last();
int rowCount = rs.getRow();
rs.beforeFirst();
[/code]
라고 선언하고 하면 됩니다.

 
Posted by 머드초보
,