이번 편에서는 ResultSet에 대해 알아보려고 한다.
결과값을 담는 ResultSet에 대해 알아보자!
앞서 설명했듯 결과값을 담는 객체이다.
그런데 먼저 이름을 살펴보자. Set? 설마 자료형의 Set?
그렇다! 그것과 비슷하다. 정말로 그 Set인지는 모르겠지만..
암튼 이름이 Set인 만큼, 값을 꺼내오는 방식도 비슷하다.
다만 ResultSet의 경우, 테이블을 생각하면 편하다.
ResultSet에는 다음처럼 결과값을 담는다고 하였다.
ResultSet rs = stat.excuteQuery("SELECT * FROM USER");
이렇게 담았을 경우, ResultSet이 가리키는 위치는 다음과 같다.
즉, 0번째 줄을 가리키고 있는 것이다.
때문에 다음 줄을 가리키기 위해, next() 메서드를 수행한다.
while(rs.next()) {
next() 메서드는 다음 줄이 있으면 TRUE를 반환하고 넘어가고, 없으면 FALSE를 반환하는 메서드 이다.
지금은 다음줄이 있으므로 다음과 같이 된다.그럼 이제 값을 꺼내와야 하는데, 어떻게 꺼내올 수 있을까?
값은 테이블 속성의 데이터 형과 순서를 매겨 가져온다.
가령 Id 속성은 int형이고 1번째이므로, 이렇게 가져온다.
while(rs.next()) {
rs.getInt(1);
}
그렇다면 name은? String형이고 2번째이므로 다음과 같다.
while(rs.next()) {
rs.getInt(1);
rs.getString(2);
}
이런 식으로 모두 작성해주면 다음과 같다.
while(rs.next()) {
rs.getInt(1);
rs.getString(2);
rs.getString(3);
}
하지만 rs는 일시적인 객체이다. DB 작업이 끝나면 폐기되야 한다.
따라서 USER 테이블에 맞게 User 클래스를 생성해주고,
해당 객체에 담을 수 있도록 한다.
// User 클래스 작성
class User {
private int id;
private String name;
private String description;
/*
* getter/setter 메소드들
*/
}
-------------------------------------------
// User 객체 생성
User user = new User();
// rs에서 값을 꺼내며, User 객체에 담음
while(rs.next()) {
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setDescription(rs.getString(3));
}
그리고 여러 User 데이터를 담아야 하므로, List를 생성하여 값을 저장한다.
즉, 최종적으로 다음과 같다.
// User 클래스 작성
class User {
private int id;
private String name;
private String description;
/*
* getter/setter 메소드들
*/
}
-------------------------------------------
// User 객체 생성
User user = new User();
// 여러 User 데이터들을 담기 위한 리스트 생성
List<User> userList = new ArrayList<>();
// rs에서 값을 꺼내며 리스트에 담음
while(rs.next()) {
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setDescription(rs.getString(3));
// User 데이터 하나를 리스트에 추가
userList.add(user);
}
이번 편은 ResultSet을 어떻게 사용하는지에 대해 알아보았다.
사실 간단한 내용인데, 적다보니 길어져서 내용을 줄였다...ㅠㅜ
다음 편은 정말로 CRUD에 대해 알아보자!