[DB] JDBC (03/16)

박세윤·2023년 3월 16일
0

DataBase

목록 보기
3/3
post-thumbnail

📖 JDBC

📌 JDBC


✅ JDBC (Java DataBase Connectivity)

  • Java 프로그램에서 DB에 일관된 방식으로 접근할 수 있도록 API를 제공하는 클래스의 집합

    • 자바의 다형성 특성에 맞음
  • DB에서 자료를 쿼리하거나 업데이트 하는 방법을 제공

    • 쿼리한다 : select와 연관
    • 업데이트 한다 : insert / update / delete 와 연관
  • Java에서는 JDBC를 이용하여 SQL을 DBMS와 주고받는다.

  • DBMS의 종류와 관계없이 사용 가능. (약간의 설정만 조금 수정하면 가능)



✅ JDBC를 이용하여 DB에 연결하는 방법

  1. JDBC 드라이버 로드

  2. DB 연결

  3. SQL문 실행

  4. DB 연결 끊음

    • 연결을 안끊으면 서버에 많은 통로가 열려있다는 것이고 서버가 힘들어한다..



✅ JDBC 드라이버 로드

  • DB와 연결하기 위해 사용할 JDBC 드라이버를 프로그램 시작할 때 로딩

  • 필요한 DBMS의 jar 파일을 프로젝트에 추가

    • mvn repository에서 java mysql 쳐서 connector java에서 8.0.21인가 그거임
  • java.lang.Class 클래스의 정적 메소드 forName()을 이용하여 JVM 안으로 클래스를 메모리에 적재

  • DriverManager를 통해 접근 가능



✅ DB별 Driver Class

  • MySQL : com.mysql.cj.jdbc.Driver



✅ DB 연결

  • DriverManager 클래스의 static 메소드인 getConnection(URL, UserId, UserPassword)을 통해 연결 요청

  • Connection conn = DriverManager.getConnection("URL", "", "");

  • Connection은 인터페이스이므로 new 연산자를 통해 인스턴스를 생성하지 않고 만들어진 인스턴스를 얻어와 저장한다. (default : AutoCommit 상태)



✅ DB별 URL

  • MySQL : jdbc/mysql://HOST:PORT/DATABASE[?키=값&키-값...]



✅ SQL 실행 (Statement)

  • SQL문을 수행하기 위해서는 Statement 객체가 필요하다.

  • Connection 객체를 이용하여 createStatement() 메소드를 통해 생성

  • executeQuery(String sql) : SELECT 문과 같이 결과값이 여러 개의 레코드로 구해지는 경우 사용

  • executeUpdate(String sql) : INSERT, UPDATE, DELETE 문과 같이 테이블이 변경만 되고 결과가 없는 경우 사용 반환 값은 int형

  • Autocloseable



✅ SQL 실행 (ResultSet)

  • Query에 대한 결과 값 처리

  • 반환 값이 여러 개인 경우에 이를 받아서 쉽게 처리할 수 있게 설계됨.

  • 표 형태

  • next()를 통해 현재 행에서 다음 행으로 커서 이동

  • previouse()를 통해 현재 행에서 이전 행으로 커서 이동

    • 우린 previouse() 안쓰고 next()로 충분함
  • getXXX (Column Name / index)를 통해 값을 가져올 수 있음.

  • AutoCloseable



✅ SQL 실행 (PreparedStatement)

  • Statement의 단점 극복한 인터페이스

  • 간단하게 쿼리문을 작성할 수 있도록 도움을 줌

  • Connection 인터페이스의 prepareStatement(String sql) 메서드를 통해 가져옴.

    • 여기서 sql 작성
  • executeQuery() / executeUpdate() 사용

    • 날릴 때 sql 작성안함 미리 해놨음
  • SQL문은 ? 기호를 사용해서 표현 가능 ["INSERT INTO member VALUES(?, ?, ?, ?)";]

  • ? 기호에 값을 setXXX (int 순서 / 실제 데이터나 변수)를 통해 할당해야 함.

  • 생성할 때 SQL문을 넣은채로 생성한다 => Statement와의 차이점.



✅ DB 연결 끊음

  • 모든 작업이 끝나면 ResultSet, Statement (or PreparedStatement), Connection의 close()를 통해 연결을 종료 (역순으로 종료)
profile
개발 공부!

0개의 댓글