inblog logo
|
devJun
    JDBC

    [JDBC] DAO 를 활용한 쿼리문 작성 2 (select)

    devJun's avatar
    devJun
    Aug 06, 2024
    [JDBC] DAO 를 활용한 쿼리문 작성 2 (select)
    Contents
    1. select문 문법2. 번호로 select 조회3. 전체 테이블 조회
     
     
    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 조회

     
    notion image
     
    select 문은 결과 값이 테이블 형태이다. 테이블 형태의 값은 시작할 때 그림과 같이 열의 이름을 나타낸다. 실제 테이블의 값을 파싱하기 위해선 화살표의 포인터가 다음 값을 향하도록 해야 한다.
     
    ResultSet rs = pstmt.executeQuery(); // 테이블 값 리턴 boolean isRow = rs.next(); // 테이블 커서 내리기
    notion image
     
    위의 코드는 화살표의 포인트를 아래로 내리는 포인트다. 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()); } }
     
    notion image
     
     

    3. 전체 테이블 조회

     
    notion image
     
    그림처럼 데이터베이스에 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); }
     
     
    notion image
     
    User 클래스에 toString 메서드를 생성하면 정리된 결과값을 볼 수 있다.
     
     
    💡
    여러 개의 Object 타입의 데이터를 받기 위해서는 Collection 을 사용해야 한다.
     
    Share article

    devJun

    RSS·Powered by Inblog