CS 지식/데이터베이스

[데이터베이스] JDBC 정리

2023. 2. 13. 01:02
반응형

JDBC란?

  • Java DataBase Connectivity의 약자
  • 자바 프로그래밍 언어로 만들어진 클래스와 인터페이스로 이루어진 API로서 ANSI SQL를 지원한다
  • SQL문을 실행할 수 있는 함수 호출 인터페이스이다

특징

  • DBMS 종류에 독립적인 자바 프로그래밍 가능
  • 데이터베이스의 종류가 달라지더라도 동일한 API를 사용하게 해준다
  • 자바가 가지는 플랫폼에 독립적이라는 특성과 DBMS에 독립적인 특성을 가진다

기능

  • 데이터베이스에 연결 설정 한다
  • SQL 문장을 DBMS에 전송한다
  • SQL 문장 전송 후 결과를 처리할 수 있게 해준다

인터페이스

  • 데이터베이스를 만드는 업체에게 제공되는 인터페이스
    • 업체에게 제공되는 인터페이스를 각각의 DBMS업체들이 구현해 놓은 것으로서 이것이 바로 드라이버다
  • 프로그래머에게 제공되는 인터페이스
    • SQL 패키지가 제공하고 있는 라이브러리로서 프로그래머는 이 라이브러리를 기반으로 DB 프로그램을 작성할 수 있다

JDBC API - java.sql package

  • Driver(interface)
    • 드라이버에 대한 정보를 가지고 있다
    • 모든 드라이버가 반드시 구현해야 하는 인터페이스
    • 드라이버의 버전이나 연결에 대한 정보를 알아볼 수 있는 메소드를 가지고 있다
  • Connection(interface)
    • 데이터베이스에 대한 하나의 세션을 표현한다
      • 세션은 하나의 클라이언트가 서버에 요청을 하기 위해 연결을 맺은 상태를 의미한다
    • DriverManager 클래스의 getConnection() 메소드를 이용하여 얻어 올 수 있다
    • 디폴트로 setAutoCommit(true)로 설정된다
    • 개발자가 원하는 경우에 commit을 해주고 싶거나 트랜잭션이 아주 중요한 부분에 있어서 RollBack 처리를 하고자 할 경우에는 setAutoCommit(false)로 설정한다
      • 단 이 경우에는 SQL문을 수행할 때 마다 명시적으로 commit()을 호출해야 한다
  • Statement(interface)
    • SQL문장을 실행하고 그것에 대한 결과 값을 가져오기 위해 사용한다
    • public boolean excute(String sql) throws SQLException
      • 특별히 SQL문을 구분하지않고 DML, Query, DDL 등을 수행할 수 있다
      • 결과가 ResultSet이면 true이고 결과가 DML이거나 특별한 결과가 없으면 false를 리턴한다
    • public ResultSet excute(String sql) throws SQLException
      • Select를 처리할 때 사용된다
    • public int excuteUpdate(String sql) throws SQLException
      • 주로 DML(delete, update, insert)등의 SQL을 수행할 때 사용된다
  • PreparedStatement(interface)
    • 동일한 SQL 문장이 여러 번 반복적으로 수행될 때 사용하는 객체
    • 대용량의 문자나 바이너리 타입의 데이터(이미지나 사운드)를 저장하기 위해서도 사용될 수 있다
    • SQL 문장이 미리 컴파일 되어 PreparedStatement 객체에 저장된다
    • 여러번 반복 수행 시 clearParameters() 메소드를 이용해 Statement에 남겨진 값을 초기화 한다
    • public ResultSet executeQuery() throws SQLException
      • Select를 처리할 때 사용한다
    • public int excuteUpdate() throws Exception
      • 주로 DML(delete, update, insert)등의 SQL을 수행할 때 사용된다
  • CallableStatement(interface)
    • 데이터베이스에 대하여 실제 SQL문을 실행하는 것이 아니라 Stored Procedures를 호출한다
    • Stored Procedures란 연속되는 SQL문으로 데이터베이스에 저장해 두고 마치 함수의 호출처럼 사용한다
    • 데이터베이스의 Stored Procedures를 만들어 두고 자바에서 호출하여 사용할 수 있게 한다
    • Stored Procedures 사용 시 속도의 향상을 기대할 수 있고 자바 코드에 SQL문장이 들어가지 않으므로 자바 코드가 SQL에 독립적이 된다
  • ResultSet(interface)
    • 쿼리에 대한 결과값 처리
    • ResultSet 객체의 커서는 첫번째 레코드보다 바로 이전을 가리킨다
    • next()
      • ResultSet 객체의 커서를 이동
    • getXXX(index or name) 메소드를 이용하여 데이터를 얻을 수 있다
      • getString(index or name);
      • getInt(index or name);
      • getDate(index or name);
      • .....

JDBC 프로그래밍 개발 순서

  1. JDBC Driver Loading
    • 데이터베이스와의 접속을 오픈 하기 위해 애플리케이션의 JVM안으로 특정 드라이버 클래스를 적재
    • Class.forName(Driver ClassName);
    • 각 데이터베이스별 드라이버 클래스
      • MySQL : com.mysql.cj.jdbc.Driver
      • Oracle : oracle.jdbc.driver.OracleDriver
      • MSSQL : com.microsoft.sqlserver.jdbc.SQLServerDriver
  2. DBMS와 연결 (Connection 생성)
    • DriverManager 클래스를 이용하여 URL 형태로 주어진 데이터베이스에 대한 접속을 요청
    • Connection con = DriverManager.getConnection(URL, dbid, dbpassword);
    • JDBC URL은 드라이버 고유의 방식으로 개별적인 데이터베이스를 식별
      • MySQL
      • Oracle
      • MSSQL
  3. SQL 실행 준비 (Statement, PreparedStatement 생성)
    • String sql = "insert, update, delete, select, .....";
    • Statement 생성
      • Statement stmt = conn.createStatement();
    • PreparedStatement 생성
      • PreparedStatement pstmt = conn.prepareStatement(sql);
  4. SQL 실행 (executeUpdate, executeQuery)
    • DML(insert, update, delete)
    • Query(select)
    • Statement
      • DML
        • int cnt = stmt.executeUpdate(sql);
      • Select
        • ResultSet rs = stmt.executeQuery(sql);
    • PreparedStatement
      • sql문의 치환변수 값 설정
        • pstmt.setXXX(index, value);
      • DML
        • int cnt = pstmt.executeUpdate();
      • Select
        • ResultSet rs = pstmt.executeQuery();
    • ResultSet
      • ResultSet을 얻어온 후 rs.next()를 실행해야 한다
        • Select의 결과가 반드시 하나가 나오는 경우 : rs.next();
        • Select의 결과가 하나 또는 못 얻어 오는 경우 : if (rs.next()) { }
        • Select의 결과가 여러 개 나올 수 있는 경우 : while(re.next()) { }
      • 값 얻기
        • String str = rs.getString(index or name);
        • int cnt = rs.getInt(index or name);
  5. DBMS 연결 끊기
    • 모든 작업이 끝난 경우에는 ResultSet, Statement(PreparedStatement), Connection 객체의 close() 메소드를 이용하여 작업을 종료한다(연결한 순의 역순으로 종료)
    • Connection은 상당한 Overhead를 가져온다 따라서 최적화된 상태를 유지하기 위해서는 반드시 Connection을 닫아 주어야 한다
      • rs.close();
      • pstmt.close();
      • conn.close();
    • Try~with~resources
      • AutoCloseable 구현체에 한정
반응형

'CS 지식 > 데이터베이스' 카테고리의 다른 글

[데이터베이스] 면접 질문 대비  (0) 2023.03.30
[데이터베이스] 정규화 정리  (0) 2023.03.30
[데이터베이스] MySQL 정리  (0) 2023.02.12
[데이터베이스] SQL 함수 및 키워드 정리  (0) 2023.02.02
[데이터베이스] 앨리어스(Alias) 사용했을 때 ORDER BY 가 정상 동작 하지않을 때 해결 방법  (0) 2023.02.02
'CS 지식/데이터베이스' 카테고리의 다른 글
  • [데이터베이스] 면접 질문 대비
  • [데이터베이스] 정규화 정리
  • [데이터베이스] MySQL 정리
  • [데이터베이스] SQL 함수 및 키워드 정리
지나가던 개발자
지나가던 개발자
지나가던 개발자
나의 발전을 위한 공간
지나가던 개발자
전체
오늘
어제
  • 분류 전체보기 (221)
    • 언어 (86)
      • C++ (43)
      • JAVA (43)
    • 게임 개발 (4)
      • 간단한 RPG 게임 만들기 (4)
      • 게임 개발 이슈 해결 (0)
    • 백준 문제풀이 (36)
      • PLATINUM (0)
      • GOLD (13)
      • SILVER (21)
      • BRONZE (2)
    • 프로그래머스 문제풀이 (32)
      • LEVEL 5 (0)
      • LEVEL 4 (0)
      • LEVEL 3 (7)
      • LEVEL 2 (19)
      • LEVEL 1 (6)
    • SQL 문제풀이 (15)
      • 프로그래머스 (4)
      • 해커랭크 (11)
    • 디자인 패턴 (1)
    • 웹 (17)
      • 웹 이론 정리 (17)
    • CS 지식 (28)
      • 알고리즘 (0)
      • 데이터베이스 (11)
      • 자료구조 (0)
      • 네트워크 (7)
      • 그래픽스 (0)
      • 운영체제 (9)
      • 기타 (1)
    • Git (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 깃 허브

공지사항

인기 글

태그

  • Silver 3
  • 열거 타입과 애너테이션
  • 객체 지향 설계
  • mysql
  • c++
  • level 1
  • Gold 5
  • 프로그래머스
  • 백준
  • 객체 생성과 파괴
  • Chapter 4
  • 소멸자 및 대입 연산자
  • 해커랭크
  • 상속
  • Level 2
  • 클래스와 인터페이스
  • Chapter 6
  • BOJ
  • java
  • 설계 및 선언

최근 댓글

최근 글

hELLO · Designed By 정상우.
지나가던 개발자
[데이터베이스] JDBC 정리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.