[JDBC] 2. BankDAO
Jan 22, 2024
Contents
@Test 어노테이션DAO는 Data Access Object입니다. 어느 회사를 가도 사용한데요. 만들어놔야 재사용이 편하그든요
SRP(Single Responsibility Principle) - 단일 책임 원칙

외워야 하는게 있습니다. 자다가 물어봐도 대답해야합니다.
DB가 DAO로 데이터를 보내면 파싱을 합니다. byte stream으로 Table이나 Int값을받기 때문입니다. 또 DAO는 main에게 JSON으로 데이터를 보내면 우리는 java object로 바꿔줘야 합니다. 다른언어니깐요 🥕
DELETE
DELETE 쿼리를 실행할 메서드 입니다. BankDAO 클래스 안에 집어넣습니다.
public int deleteByNumber(int number) {
Connection conn = DBConnection.getInstance(); // 소켓
try {
String sql =
"DELETE FROM account_tb WHERE number =?";
PreparedStatement pstmt = conn.prepareStatement(sql); // 오류나면 catch로
pstmt.setInt(1, number); // DB의 리턴
int num = pstmt.executeUpdate();
return num;
} catch (Exception e) {
e.printStackTrace(); // 확인
}
return -1;
}
@Test 어노테이션
코드 실행 전 Test때려봅니다. 가장 먼저 데이터 베이스에 잘 연결되는지 검증합니다.
@Test 어노테이션을 사용해서 테스트합니다. 다음과 같은 형태로 쓸거에요

package dao;
import db.DBConnection;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
public class BankDAOTest {
@Test
public void getInstance_test(){
// given == 파라메터
// when == 본 코드 실행
Connection conn = DBConnection.getInstance();
// then == 검증
if (conn == null)
System.out.println("실패");
else
System.out.println("성공");
}
}
✅버튼으로 해당 메서드만 실행시킬 수 있습니다.


@Test를 사용해서 데이터를 삭제해봅니다.
package dao;
import org.junit.jupiter.api.Test;
public class BankDAOTest {
@Test
public void deleteByNumber_test(){
// given == 파라미터
int number = 14;
// when == 본 코드 실행
BankDAO dao = new BankDAO();
int result = dao.deleteByNumber(number);
// then == 검증
if (result == 1)
System.out.println(number + "번이 삭제되었습다니.");
else if (result == 0)
System.out.println("해당 번호를 찾을 수 없습니다.");
else
System.out.println(number + "번 삭제 실패했습니ㅏㄷ.");
}
}

다른쿼리
INSERT
public int insert(String password, int balance){
Connection conn = DBConnection.getInstance();
try {
String sql =
"insert into account_tb(password, balance, created_at) values(?, ?, now())"; // number는 auto_increment
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, password);
pstmt.setInt(2, balance);
int num = pstmt.executeUpdate();
return num;
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
UPDATE
public int updateByNumber(int balance, int number){
Connection conn = DBConnection.getInstance();
try {
String sql =
"update account_tb set balance = ? where number = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, balance);
pstmt.setInt(2, number);
int num = pstmt.executeUpdate();
return num;
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
SELECT
public Account selectByNumber(int number){
Connection conn = DBConnection.getInstance();
try {
String sql = "select * from account_tb where number = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, number);
ResultSet rs = pstmt.executeQuery();
if (rs.next()){ // rs.next() == 커서 한 칸 내리기
Account account = new Account(
rs.getInt("number"),
rs.getString("password"),
rs.getInt("balance"),
rs.getTimestamp("created_at")
);
return account;
}
}catch(Exception e){
e.printStackTrace();
}
return null;
전체 데이터를 SELECT하는 메세드
ArrayLIst를 만들어 저장하고 반환합니다.
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()){
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;
}
테스트 해봐야겠죠?
@Test
public void selectAll_test(){
// given
// when
// then
BankDAO dao = new BankDAO();
List<Account> accountList = dao.selectAll();
System.out.println(accountList.size());
System.out.println(accountList); // 한줄로 출력
for (Account a : accountList){ // 한줄씩 출력
System.out.println(a);
}
}

main 클래스
import dao.BankDAO;
import java.util.Scanner;
public class BankApp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("삭제할 계좌번호를 입력해주세요 : ");
int number = sc.nextInt();
BankDAO dao = new BankDAO();
int result = dao.deleteByNumber(number);
if (result == 1)
System.out.println("삭제되었습니다.");
else
System.out.println("삭제하지 못했습니다.");
}
}
Share article