초록꼬마의 devlog
article thumbnail

2021.11.25(목)

💻 PreparedStatement 실습

  • MEMBER 관리 프로그램 계속/마무리(수업 시간에도 직접 해보고, 강사님과 확인)

🌿 Template 클래스

  • JDBC 과정/수업 중 반복적으로 쓰이는 구문들, 특히 DAO 클래스 메서드들의 공통적인 부분을 각각의 메소드로 정의해둘 곳
  • 재사용할 목적으로 공통 템플릿(template) 작업 진행
  • 이 클래스에서의 모든 메소드들은 다 static 메소드로 만듦 = 싱글톤(Singleton) 패턴 = 프로그램 실행과 동시에 메모리 영역에 단 1번만 올라간/올려놓은 것을 재사용한 개념
  • 객체 사용 시 새로운 객체를 계속 생성해서 사용(x) 객체 하나만으로/하나의 객체만 생성해 어디에서든지 가져다 쓸 수 있는 개념; 공유 + 재사용(o)

e.g. Math클래스는 모든 필드와 메소드(의 접근제한자)가 static으로 되어있음 → static 메모리 = 프로그램 시작~끝 사용 가능; 메모리에 항상 올라와있음 → 언제든지, 객체 생성(heap 메모리 영역에 올림) 없이, 사용 가능/객체 생성할 필요 없음 = 굳이 생성자 필요 없음 = design patterns 중의 하나인 Singleton pattern

✔️ static 메모리영역에 있는 것들은 객체 생성 안 해도 사용 가능

  1. public static Connection getConnection() = DB와 접속된 Connection 객체를 생성해서 반환시켜주는 메소드
  2. public static void close(Connection conn/Statement stmt/ResultSet rset) = 전달받은 JDBC용 객체를 각 객체별로 반납시켜주는 메소드

메서드 오버로딩 + (Prepared)Statement 인자 전달 시 다형성 적용

  1. public static void commit/rollback(Connection conn) = 전달받은 Connection 객체를 가지고 트랜잭션 처리를 해주는 메소드

🌿 Service 클래스

  • 기존의 Dao 클래스의 역할 분담
  • Controller와 Dao 사이의 역할 = Controller에서 Service 호출(Connection 객체 생성) 후, Service를 거쳐서 Dao로 넘어감
  • '연결'하고 Connection 관련 역할 담당
  • Dao 호출 시 Connection 객체 + 기존에 Controller에서 Dao로 넘기고자 했던 매개변수를 같이 넘겨줌 → DML구문의 경우, Dao 처리가 끝나면 Dao 결과에 따른 트랜잭션 처리도 Service단에서 같이 해줌
  • Service단을 추가함으로써 Dao에는 순수하게 SQL문을 처리하는 부분만 남음

출처: 강사님

📗 homework: Statement 사용한 JDBC 프로그램 (다시) 만들어보기

JDBC 시험 = 서술형 8문제(DBMS/Oracle 필기/교재 내용) + 문제해결 시나리오 4문제(JDBC 순서에 따라 무엇을 해줘야 하는지 등 모두 이해하고 (Prepared)Statement codes 각각 5번씩 + Template 3번씩 직접 써봐야 함)

🔍 문제해결 시나리오 문제 exemple = conn.prepareStatement(sql);로 쓰면 무엇이 + 왜 작동이 안 되는가?
- 문제점 = PreparedStatement 객체가 null이기 때문에 미완성 상태의 SQL문 완성시킬 때 등 null point exception 발생
- 사유 = PreparedStatement 객체를 변수에 담지 않았기 때문에
- 해결방법 = 윗줄 코드를 pstmt = conn.prepareStatement(sql);와 같이 수정