

- 자바에서는 재사용성을 위해 ?을 사용해서 미완성 쿼리를 만듦
쿼리를 완성시킬 코드가 필요함
- 쿼리가 버퍼에 담기고 형성된 스트림을 통해서 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