반응형
JDBC(Java Database Connectivity)
- JAVA 기반 애플리케이션의 데이터를 DB에 저장 및 업데이트 할 수 있는 자바 API
- DB에 저장된 데이터를 JAVA에서 사용할 수 있도록 하는 자바 API
- JDBC는 JAVA 애플리케이션 내에서 JDBC API를 사용하여 DB에 접근하는 단순한 구조
- JDBC API를 사용하려면 JDBC 드라이버를 먼저 로딩한 후 DB와 연결
표준 인터페이스
- java.sql.Connection : 연결
- java.sql.Statement : SQL을 담은 내용
- 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); }
반응형