- 자바에서는 재사용성을 위해 ?을 사용해서 미완성 쿼리를 만듦
쿼리를 완성시킬 코드가 필요함
- 쿼리가 버퍼에 담기고 형성된 스트림을 통해서 DB에 요청함
- DB에서 받은 Table 데이터를 자바 오브젝트로 변환해서 읽음
DB로부터 데이터를 가져와서 오브젝트로 파싱함
- Table의 데이터 타입이 여러가지이기 때문에 배열에 담을 수는 없음
- 하나의 클래스로 반복되는 데이터 타입은 벡터에 담을 수 있음
여러가지 타입을 담을 수 있는 형태 : class
다 같은 타입이 연속적으로 있기 때문에 벡터, 컬렉션에 담아야함
- 연속적인 데이터 : 벡터 / 선
- 하나의 데이터 : 스칼라 / 점
- 가로와 세로가 있으면 메트릭스
- 여러 건을 조회하면 그 횟수만큼 커서가 내려가야 함
예시) 4건을 조회하면 커서 4번 내려야 함
전체 조회 시 거꾸로 조회함 → desc : 내림 차순!
데이터베이스에 몇 건의 데이터가 있는지 알 수 가 없음 → while을 false까지 돌려야 함
1) 데이터를 담기 위한 클래스형 자료형
package model; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; import java.sql.Timestamp; /* * DB에 Select 한 데이터를 담기 위한 오브젝트 */ @ToString @AllArgsConstructor @Getter public class Account { private int number; private String password; private int balbance; //java.sql의 Timestamp private Timestamp createdAt; }
2) selectAll 본 코드 작성하기 - executeQuery() 사용
package dao; import db.DBConnection; import model.Account; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; /* * DAO - Data Access Object * SRP - 단일 책임의 원칙*/ public class BankDAO { public List<Account> selectAll(){ Connection conn = DBConnection.getInstance(); try{ String sql = "select * from account_tb order by number desc"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); List<Account> accountList = new ArrayList<>(); while(rs.next() == true) { Account account = new Account( rs.getInt("number"), rs.getString("password"), rs.getInt("balance"), rs.getTimestamp("created_at") ); accountList.add(account); } return accountList; }catch (Exception e){ e.printStackTrace(); } return null; } }
3) selectAll 테스트
package dao; import model.Account; import org.junit.jupiter.api.Test; import java.sql.SQLOutput; import java.util.List; public class BankDAOTest { @Test public void selectAll_test(){ //given //when BankDAO dao = new BankDAO(); List<Account> accountList = dao.selectAll(); //System.out.println(accountList.size()); System.out.println(accountList); } }
Share article