초록꼬마의 devlog
article thumbnail

2021.11.22(월)

🌿 JDBC 소개

  • Java에서 데이터베이스에 접근할 수 있게 해주는 Programming API

출처: 학원 강의 내용

 

🌱 환경 설정

  • java.sql 패키지
  • OJDBC 다운로드 및 Java Build Path에 External JAR 추가(=Eclipse 라이브러리로 등록)
  • character set 설정: 문자가 제대로 출력되도록 Eclipse 작업 파일의 인코딩 방식/문자셋을 UTF-8로 일치시킴

🌱 JDBC 사용 객체

1. DriverManager

  • 데이터 원본에 JDBC 드라이버를 통해 커넥션을 만드는 역할
  • DriverManager에 DBMS Driver 등록 = Class.forName() 메서드를 통해 생성됨 → 반드시 예외(ClassNotFoundException) 처리 필요
    • e.g. Class.forName(“oracle.jdbc.driver.OracleDriver”);
    • Class.forName(“com.Microsoft.jdbc.sqlserver.SQLServerDriver”);
    • Class.forName(“org.gjt.mm.mysql.Driver”);
  • getConnection() 메서드를 사용하여 Connection 객체 생성 = url, 계정명, 비밀번호 입력하여 Connection 객체 생성 = DB와 연결시킴
    e.g. Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");

2. Connection

  • 특정 데이터 원본과 연결된 커넥션
  • DB의 연결정보(IP주소/URL, port번호, 계정명, 비밀번호)를 담고 있는 객체
  • createStatement() 메서드를 호출하여 Statement 객체 생성, 또는 prepareStatement() 메서드를 호출하여 PreparedStatement 객체 생성
  • SQL문을 실행시키기 위해 우선 Connection 객체가 있어야 함

3. Statement

  • 해당 DB에 SQL문을 전달하고 실행한 후 결과를 받아내는 객체 ← Statement 객체의 인자로 완성된 SQL문을 담아 전달
  • 실행할 SQL문이 DML문(insert, update, delete)일 경우, stmt.executeUpdate("DML문") → 반환 자료형 = 처리된 행의 수 int
  • 실행할 SQL문이 SELECT문인 경우, stmt.executeQuery("SELECT문") → 반환 자료형 = 질의 결과 데이터 모음 ResultSet

4. PreparedStatement

  • 해당 DB에 SQL문을 전달하고 실행한 후 결과를 받아내는 객체 ← 각 인수에 대해 위치 홀더 '?'를 사용해 SQL문을 정의
  • Statement 객체와의 차이점 = 미완성된 SQL문을 먼저 전달하여 SQL문이 미리 컴파일되고, 실행 시간동안 인수 값을 위한 공간을 확보함/실행하기 전에 완성 형태로 만든 후 실행만 하면 됨

5. ResultSet

  • SELECT문을 사용한 질의 성공 시 반환되는 객체 → ResultSet에 담겨있는 데이터를 하나씩 뽑아서 VO 객체에 담음(많으면 ArrayList로 관리)
  • SQL 질의에 의해 생성된 테이블을 담고 있음
  • cursor로 특정 행에 대한 참조 조작

출처: 학원 강의 내용

 

🌱 JDBC 프로그래밍 절차

출처: 학원 강의 내용

 

🌿 MVC 패턴

출처: 강사님

🌱 Run

  • 애플리케이션 실행을 위해 main() 메서드를 가지고 있는 패키지

🌱 View

  • Client에게 보여주는 화면 담당

🌱 Controller

  • View로부터 전달받은 데이터를 가공 처리(데이터 변환, 디코딩 등)한 뒤 DAO로 전달
  • DAO로부터 전달받은 결과에 따라 View를 결정하여 인코딩 후 데이터 전송

🌱 Model

  • DBMS에서 전송된/전송할 데이터를 보관할 수 있는 클래스(VO) 및 DBMS와 통신하면서 데이터를 주고 받는 클래스(DAO)가 있는 패키지
  • VO(Value Object) = 데이터베이스의 각 컬럼 개체(entity) 저장용 클래스가 있는 패키지 → DB의 도메인 정보를 Client에게 전달할 때 그 도메인 단위 정보를 VO에 구현
  • DAO(Database Access Object) = DBMS에 접속하여 실제 데이터를 전송하거나 결과 값을 전달받는 클래스가 있는 패키지

💻 JDBC 작업 맛보기 실습

  • 실습 파일 = 01_JDBC_ProductManager 디렉토리

📗 homework: 복습