DB/JDBC

JDBC

yebin0322 2025. 1. 23. 17:02
반응형

JDBC(Java Database Connectivity)

  • JAVA 기반 애플리케이션의 데이터를 DB에 저장 및 업데이트 할 수 있는 자바 API
  • DB에 저장된 데이터를 JAVA에서 사용할 수 있도록 하는 자바 API
  • JDBC는 JAVA 애플리케이션 내에서 JDBC API를 사용하여 DB에 접근하는 단순한 구조
  • JDBC API를 사용하려면 JDBC 드라이버를 먼저 로딩한 후 DB와 연결

표준 인터페이스

  1. java.sql.Connection : 연결
  2. java.sql.Statement : SQL을 담은 내용
  3. java.sql.ResultSet : SQL 요청 응답

동작 흐름

JAVA 애플리케이션 -> JDBC API -> JDBC 드라이버 -> 데이터베이스

API 사용 흐름

JDBC 드라이버 로딩 -> Connection 객체 생성 -> Statement 객체 생성 -> Query 실행 -> ResultSet 객체로부터 데이터 조회 -> ResultSet 객체 Close -> Statement 객체 Close -> Connection 객체 Close

JDBC 드라이버

  • DB와의 통신을 담당하는 인터페이스
  • Oracle, MS SQL, MySQL 등과 같은 DB에 알맞은 JDBC 드라이버를 구현하여 제공
  • JDBC 드라이버의 구현체를 이용해서 특정 벤더의 데이터베이스에 접근할 수 있음

객체

Properties

  • key - value로 데이터를 저장하는 객체
  • 주로 설정 파일이나 환경 변수를 읽어오는 데 사용됨
    Properties properties = new Properties();
    properties.load(new FileInputStream("config.properties"));

Reader

  • 문자 스트림을 읽기 위한 추상 클래스
  • 파일, 문자열 등 다양한 소스에서 문자를 읽을 수 있음
  • 텍스트 파일이나 문자열을 읽어오는 데 사용됨
    BufferedReader reader = new BufferedReader(new FileReader("data.txt"));

Connection

  • DB에 대한 연결을 나타내는 객체
  • JDBC API를 사용하여 DB와 상호작용 할 수 있게 해줌
  • SQL 쿼리를 실행하고, DB와의 연결을 관리하는 데 사용됨
    Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);

PreparedStatement

  • 미리 컴파일된 SQL 쿼리를 나타내는 객체
  • SQL Injection 공격을 방지하고 성능을 향상시키는 데 도움을 줌
  • SQL 쿼리를 실행할 때, 쿼리의 매개변수를 설정하고 실행하는 데 사용됨
    PreparedStatement psmt = conn.prepareStatement("SELECT * FROM users WHERE username = ?");

ResultSet

  • JDBC API를 사용하여 SQL 쿼리 결과를 저장하는 객체
  • DB에서 실행된 쿼리의 결과를 row, column형태로 표현하며, 각 행을 반복(iterate)하여 데이터를 읽을 수 있는 방법을 제공함
  • String SQL = "SELECT * FROM USER"; try (Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword); PreparedStatement psmt = conn.prepareStatement(SQL);) { ResultSet resultSet = psmt.executeQuery(); while (resultSet.next()) { String seq = resultSet.getString(1); String name = resultSet.getString(2); int age = Integer.parseInt(resultSet.getString(3)); String phone = resultSet.getString(4); String address = resultSet.getString(5); AddressVO addressObject = new AddressVO(); addressObject.setName(name); addressObject.setAge(age); addressObject.setPhone(phone); addressObject.setAddress(address); addressList.add(addressObject); } } catch (Exception e) { logger.error(e.getMessage(), e); }
반응형