다가오는 다음을 향해
[JSP Java] 에러 - java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY. 본문
국비학원 공부노트/JSP
[JSP Java] 에러 - java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
hyeseo 2022. 2. 23. 10:54[ 개발환경 ]
MacBook Air M1 2020년형
eclipse [2021-3 var]
Java [zulu-8]
JSP
Tomcat [Apache Tomcat/9.0.58]
MacBook Air M1 // Java JSP로 게시판 구현 중 해결한 걸 정리하는 목적으로 작성하는 글입니다..
오류: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
▼ 수정 전 코드
conn = DBConnection.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.absolute(index)) {
BoardDTO board = new BoardDTO();
board.setNum(rs.getInt("num"));
board.setId(rs.getString("id"));
board.setName(rs.getString("name"));
board.setSubject(rs.getString("subject"));
board.setContent(rs.getString("content"));
board.setRegist_day(rs.getString("regist_day"));
board.setHit(rs.getInt("hit"));
board.setIp(rs.getString("ip"));
list.add(board);
if (index < (start + limit) && index <= total_record)
index++;
else
break;
}
원인 : 커서를 이동하지 않고 건너 뛰어서 발생한 것이였다.
pstmt = conn.prepareStatement(sql); 를
커서 위치 지정해줄 수 있게 아래 부분만 변경했다.
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
[ 참고자료 ]
▼ ResultSetType : 이동 관련 속성값
속성 | 설명 |
ResultSet.TYPE_FORWARD_ONLY | 커서를 다음레코드(아래 행 row)로만 이동 가능 |
ResultSet.TYPE_SCROLL_INSENSITIVE | 커서를 원하는 행으로 이동 - 업데이트 내용 미반영 |
ResultSet.TYPE_SCROLL_SENSITIVE | 커서를 원하는 행으로 이동 - 업데이트 내용 반영 |
ResultSet.TYPE_CONCUR_READ_ONLY | 데이터 변경 불가능 |
ResultSet.TYPE_CONCUR_UPDATABLE | 데이터 변경 가능 |
▼ 데이터 커서 이동 메소드
메소드 | 설명 |
beforeFirst() | resultset객체의 첫 부분으로 이동 |
afterLast() | resultset객체의 끝부분으로 이동 |
first() | 처음 레코드가 존재하는 행으로 이동 |
last() | 마지막 레코드가 존재하는 행으로 이동 |
next() | 다음 레코드 행으로 이동한다. |
previous() | 이전 레코드 행으로 이동한다. |
absolute(int rownum) | 지정한 위치로 커서 이동한다. |
▼ 수정 후 코드
conn = DBConnection.getConnection();
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = pstmt.executeQuery();
while (rs.absolute(index)) {
BoardDTO board = new BoardDTO();
board.setNum(rs.getInt("num"));
board.setId(rs.getString("id"));
board.setName(rs.getString("name"));
board.setSubject(rs.getString("subject"));
board.setContent(rs.getString("content"));
board.setRegist_day(rs.getString("regist_day"));
board.setHit(rs.getInt("hit"));
board.setIp(rs.getString("ip"));
list.add(board);
if (index < (start + limit) && index <= total_record)
index++;
else
break;
}