Dev/Java

JDBC (Programming)

OK-가자 2021. 10. 5. 15:58

JDBC 개요 - 정의

  • JDBC(Java Database Connectivity)의 정의
    • 자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과
      로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약
    • 자바 프로그램내에서 SQL문을 실행하기 위한 자바 API
    • SQL과 프로그래밍 언어의 통합 접근 중 한 형태
  • 개발자를 위한 표준 인터페이스인 JDBC API와 데이터베이스 벤더,
    또는 기타 써드파티에서 제공하는 드라이버(driver)

JDBC 개요 - 환경 구성

JDBC 개요 - 참고

JDBC 사용 – 단계별 정리

  • JDBC를 이용한 데이터베이스 연결 방법
  1. 단계 : import java.sql.*;
  2. 단계 : 드라이버를 로드 한다.
  3. 단계 : Connection 객체를 생성한다.
  4. 단계 : Statement 객체를 생성 및 질의 수행
  5. 단계 : SQL문에 결과물이 있다면 ResultSet 객체를 생성한다.
  6. 단계 : 모든 객체를 닫는다.

JDBC 사용 – 단계별 설명 1

IMPORT
import java.sql.*; 

드라이버 로드
Class.forName( "oracle.jdbc.driver.OracleDriver" );

Connection 얻기
String dburl  = "jdbc:oracle:thin:@localhost:1521:xe";
Connection con =  DriverManager.getConnection ( dburl, ID, PWD );

JDBC 사용 – 단계별 설명 2

Statement 생성
Statement stmt = con.createStatement();    

질의 수행
ResultSet rs = stmt.executeQuery("select no from user" );

참고
stmt.execute(“query”);          //any SQL
stmt.executeQuery(“query”);      // SELECT
stmt.executeUpdate(“query”);  // INSERT,UPDATA,DELETE

JDBC 사용 – 질의수행 예

executeQuery(String sql) – select

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(“SELECT * FROM emp”);

executeUpdate(String sql) –insert, update, delete

Statement stmt = con.createStatement();
int updateCount = stmt.executeUpdate(“INSERT INTO test VALUES (1)”);

execute(String sql) – 기 타 SQL문

Statement stmt = con.createStatement();
if(stmt.execute(sql)){
   ResultSet rs = stmt.getResultSet();
...
}else{
   int rowCount = stmt.getUpdateCount();
...
}

JDBC 사용 – 단계별 설명 3

  • ResultSet으로 결과 받기JDBC 사용 – RecordSet
    ResultSet rs = stmt.executeQuery( "select no from user" ); while ( rs.next() ) System.out.println( rs.getInt( "no") ); Close rs.close(); stmt.close(); con.close();

JDBC 사용 – RecordSet

  • SQL문에 대한 결과 를 얻는다.
    • 이동함수: next, previous, first, last, beforeFirst, afterLast, relative, absolute
  • 기본: TYPE_FORWARD_ONLY & CONCUR_READ_ONLY (= next로만 이동 가능 & Read Only)
  • 값 추출 함수: getXXX(숫자/이름) 데이터 타입에 따라 알맞게

JDBC 사용 – 주의:

  • 에러시 해결방법
  • 에러 메시지를 확인하자
  • 대소문자가 틀렸나? (클래스 이름이나 파일 이름)
  • JDBC는 제대로 찾고 있나?
  • CLASSPATH나 PATH는 설정이 잘 되어 있나?
  • MySQL은 제대로 켜져 있는가?
  • mysql로 접근이 가능한가?
  • DB Name나 user name 패쓰워드는 올바른가?

Statement 활용 - 상속관계

  • Statement를 상속받아서 각 클래스가 정의되어 있음
    자식 클래스는 부모 클래스의 기능 + alpha

Statement 활용 - PreparedStatement

  • 수행방법
    • SQL 미리 준비 : 파싱, 실행 계획 저장
    • 실시간에 Parameter 바인딩
  • 바인딩
    • 바인딩변수: ?
    • setXXX 함수: 숫자 1부터
  • 장점
    • 효율성
    • 보안 (SQL Injection)
… String sql = "SELECT no FROM user WHERE no = ?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, 10); ResultSet rs = pstmt.executeQuery(); …