본문 바로가기

Java/error.zip

Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.

Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.

 

위와 같은 오류가 발생했다.

 

Statement stmt = null;
ResultSet rs = null;
StringBuffer sb = null;

try{
  stmt = dbconn.create();
  sb = new StringBuffer();
  sb.append("SELECT * FROM TABLE\n");
  System.out.println(sb.toString());
  rs = stmt.executeQuery(sb.toString());

  rs.last();
  String[][] result = new String[rs.getRow()][6];
  rs.beforeFirst();
}

 

위의 코드 13LINE에서 오류가 발생했다.

구글링을 하니 자바의 JDBC 클래스에서 ResultSet 객체를 통해 쿼리의 결과를 가져오다 난 오류이다.

위의 코드를 짧게 설명하자면 쿼리의 Row 갯수를 이용해 2차원 배열을 만드는 코드인데 예민한 부분은 생략했다.

 

해결방안은 'stmt = dbconn.create();' 이 부분을 수정해주면 된다.

난 아래와 같이 수정을 해주었다.

 

public Statement createScrollStatement() throws SQLException {
return conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY );
}

...

Statement stmt = null;
ResultSet rs = null;
StringBuffer sb = null;

try{
  stmt = dbconn.createScrollStatement();
  sb = new StringBuffer();
  sb.append("SELECT * FROM TABLE\n");
  System.out.println(sb.toString());
  rs = stmt.executeQuery(sb.toString());

  rs.last();
  String[][] result = new String[rs.getRow()][6];
  rs.beforeFirst();
}

 

ResultSet.TYPE_SCROLL_INSENSITIVE : 양방향 이동은 가능하지만 데이터의 변경이 바로 적용되지 않는다.

ResultSet.CONCUR_READ_ONLY : 데이터를 읽을 수만 있다.

 

 


 

배운것 : 'ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE'는 Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY. 같은 에러를 방지하기 위해 필수로 넘겨주어야 할 파라미터이다.