ResultSet 예제 참고
https://yeo-computerclass.tistory.com/142?category=1269285
📌ResultSet
ResultSet이란 Statement 객체 또는 PreparedStatement 객체로 SELECT문을 사용하여 얻어온 레코드 값들을 테이블의 형태로 갖게 되는 객체이다. Statement또는 PreparedStatement객체의 executeQuery()메소드의 반환 값을 확인해보면 ResultSet으로 되어있는 것을 알 수 있다. 즉, SELECT문을 통해서 데이터를 얻어온다면 ResultSet객체에 그 데이터가 저장되기 때문에 SELECT문으로 데이터를 얻어올 때는 반드시 사용해야 하는 객체이다.
메소드 | 설명 |
close() | ResultSet 객체를 밴환한다.(닫는다.) |
getXXX(int ColumnIndex) | 인자로 지정된 번호의 컬럼값을 XXX 데이터 타입으로 가져온다. (컬럼 인덱스 지정) |
getXXX(String ColumnName) | 인자로 지정한 컬럼명의 컬럼값을 XXX 데이터 타입으로 가젼온다.(컬럼명 지정) |
next() | 다음 행(레코드)으로 커서(작업 위치)를 이동한다. 다음 행이 없으면 false 반환, 있으면 true 반환. |
Result의 커서 자유롭게 이동
여기서 자신이 원하는 레코드에 접근하려면 커서를 자유롭게 움직일 수 있어야 한다. 커서 이동 관련 메서드는 다음과 같다
메서드 | 설명 |
absolute(int rowNum) | 지정한 위치로 커서를 이동한다. |
beforeFirst() | 커서를 처음 레코드 이전 위치로 이동한다. 커서를 실제 레코드가 아닌 ResultSet 객체의 처음 부분으로 이동한다. |
afterLast() | 커서를 마지막 레코드 이후 위치로 이동한다. 커서를 실제 레코드가 아닌 ResultSet 객체의 끝 부분으로 이동한다. |
first() | 처음 레코드가 존재하는 행으로 이동한다. |
last() | 마지막 레코드가 존재하는 행으로 이동한다. |
next() | 다음 레코드 행으로 이동한다. |
previous() | 이전 레코드 행으로 이동한다. |
하지만 위와 같이 커서 이동 관련 메소드를 사용하기 위해서는 커서 옵션을 설정해주어야 한다. 만약 커서 옵션을 설정하지 않으면 자동으로 TYPE_FORWARD_ONLY 값이 적용되어 first()와 last() 등 커서를 이동하는 메소드를 이용할 수 없게 된다.
상수명 | 설명 |
TYPE_FROWARD_ONLY | 커서 이동을 다음 레코드로만 이동되도록 한다. |
TYPE_SCROLL_SENSITIVE | 커서 이동을 자유롭게 하고 업데이트 내용을 반영한다. |
TYPE_SCROLL_INSENSITIVE | 커서 이동을 자유롭게 하고 업데이트 내용을 반영하지 않는다. |
CONCUR_UPDATABLE | 데이터 변경이 가능하도록 한다. |
CONCUR_READ_ONLY | 데이터 변경이 불가능하도록 한다. |
//사용 예
...
Connection conn=null;
String sql="SELECT * FROM 테이블명";
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
Class.forName(driver);
conn.DriverManager.getConnection(url,"아이디","비밀번호");
pstmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs=pstmt.executeQuery();
rs.last(); //커서를 마지막 행으로 옮긴다.
out.println(rs.getInt(1)+","+rs.getString(2)+"<br>");
rs.first(); //커서를 처음 행으로 이동시킨다.
out.println(rs.getInt(1)+","+rs.getString(2)+"<br>");
rs.absolute(3); //커서를 3번째 레코드의 위치로 이동시킨다.
out.println(rs.getInt(1)+","+rs.getString(2)+"<br>");
}catch(Exception e){
out.println("<h3>데이터 가져오기에 실패하였습니다.</h3>");
e.printStackTrace();
}finally{
try{
rs.close();
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
📌ResultSetMetaData
ResultSetMetaData 객체는 ResultSet으로 얻어온 레코드들의 메타 정보에 해당하는 컬럼의 정보들을 제공한다. ResultSetMetaData 객체를 사용하게 되면 컬럼 수나 각 컬럼 이름, 컬럼 타입 등의 정보를 쉽게 알아낼 수 있다.
메서드 | 설명 |
getColumnCount() | ResultSet에 저장되어있는 테이블의 컬럼의 수를 반환한다. |
getColumnLabel(int column) | 해당 번호의 컬럼의 레이블(title)을 반환한다. |
getColumnName(int column) | 해당 번호의 컬럼의 이름을 반환한다. |
getColumnType(int column) | 해당 번호의 컬럼의 데이터 타입을 int형으로 반환한다. |
getColumnTypeName(int column) | 해당 번호의 컬럼의 데이터 타입을 String형으로 반환한다. |
예제
22: ResultSet 객체로부터 ResultSetMetaData 객체를 얻어온다.
24: 컬럼의 총 개수를 얻어온다.
25: 각 컬럼의 이름을 얻어온다.
27: 각 컬럼의 데이터 타입을 얻어와 출력한다.
결과
'JSP & Servlet > 개념' 카테고리의 다른 글
이클립스에서 DB 연동하기 (MySQL) (0) | 2022.06.16 |
---|---|
[JDBC] 트랜잭션 처리 (0) | 2022.04.24 |
Statement와 PreparedStatement의 차이점 (0) | 2022.04.24 |
[JSP] JDBC 연동 (MySQL) - (2) (0) | 2022.04.24 |
[JSP] JDBC 연동 (MySQL) - (1) (0) | 2022.04.24 |