이전 블로그를 참고하자.
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