select문은 insert, delete,update 와는 다르게 응답 값이 테이블 형태이다.
그래서 테이블 값을 담기 위해 클래스를 만들어두었던 User 클래스를 활용한다.
public class User {
private int number ;
private String username ;
private String password ;
private String phone ;
public User(int number, String username, String password, String phone) {
this.number = number;
this.username = username;
this.password = password;
this.phone = phone;
}
public int getNumber() {
return number;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getPhone() {
return phone;
}
}
자바에서 여러 가지 자료형을 받을 수 있는 타입은 Object 밖에 없다.
1. select문 문법
SELECT column1, column2, ...FROM table_name WHERE 원하는 값;
테이블의 모든 열을 조회하려면 * 을 사용하면 된다.
SELECT * FROM table_name where name = ? ;
이렇게 작성한다면 매개변수 ? 에 넣은 이름에 대한 모든 열의 테이블 값이 리턴된다.
2. 번호로 select 조회

select 문은 결과 값이 테이블 형태이다. 테이블 형태의 값은 시작할 때 그림과 같이 열의 이름을 나타낸다. 실제 테이블의 값을 파싱하기 위해선 화살표의 포인터가 다음 값을 향하도록 해야 한다.
ResultSet rs = pstmt.executeQuery(); // 테이블 값 리턴
boolean isRow = rs.next(); // 테이블 커서 내리기

위의 코드는 화살표의 포인트를 아래로 내리는 포인트다. rs.next() 는 boolean 타입으로 다음 열에 값이 있다면 true, 없다면 false 가 된다.
쿼리문
public User selectByNumber(int number){
Connection conn = DBConnection.getInstance();
try {
String sql = "select * from user_tb where number = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, number);
ResultSet rs = pstmt.executeQuery(); // select 는 결과값이 테이블이기 때문에 executeQuery(); 사용
boolean isRow = rs.next(); // 커서 한칸 내리기
if(isRow){
User user = new User(
rs.getInt("number"),
rs.getString("username"),
rs.getString("password"),
rs.getString("phone")
);
return user;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
실행 코드
public void selectByNumber(){
//given
int number = 2 ;
//when
UserDAO dao = new UserDAO();
User user = dao.selectByNumber(number);
if(user ==null){
System.out.println(number+ "으로 조회된 값이 없습니다.");
}else {
System.out.println(user.getNumber());
System.out.println(user.getUsername());
System.out.println(user.getPassword());
System.out.println(user.getPhone());
}
}

3. 전체 테이블 조회

그림처럼 데이터베이스에 select 를 요청했다. 그러면 DB에서는 테이블 형태의 자료형이 전송되고, 이는 자바에서 클래스를 통해 담는다. 그런데 테이블의 열이 하나가 아니라 여러 개가 된다면 이 클래스를 담기 위해선 컬렉션을 통해 담아야 한다.
public List<User> selectAll(){ // 자료형 List<User>
Connection conn = DBConnection.getInstance();
try {
String sql = "select * from user_tb order by number desc"; // 모든 테이블을 내림 차순으로 출력
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
List<User> usertList = new ArrayList<>();
while(rs.next()){ // 반복문을 통해 커서를 하나씩 내림.
User user = new User(
rs.getInt("number"),
rs.getString("username"),
rs.getString("password"),
rs.getString("phone")
);
userList.add(user);
}
return userList;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
자료형을 List<User> 로 정하고 , 반복문을 통해 파싱된 user 클래스 값을 userList 에 담는다.
@Test
public void selectAllTest(){
//given
//when
UserDAO dao =new UserDAO();
List<User> userList = dao.selectAll();
System.out.println(userList.size());
System.out.println(userList);
}

User 클래스에 toString 메서드를 생성하면 정리된 결과값을 볼 수 있다.
여러 개의 Object 타입의 데이터를 받기 위해서는 Collection 을 사용해야 한다.
Share article