[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