1. jdbc란
1. jdbc란
JDBC란?(23. 12. 01)
- Java에서 관계형 데이터베이스에 저장된 데이터를 접근하게 해주는 API
- Java Application이 일관된 API로 데이터를 연결, 검색 등을 가능하게 한다.
- 어떤 DBMS에 대해서 독립성을 가진다. → 모든 DB를 알지 못해도 JDBC API만 알면 동작 가능하다!
JDBC의 구조
구성요소 | 설명 | 역할 |
---|---|---|
Java Application | 자바 응용프로그램, 자바 웹 애플리케이션 서버(tomcat, weblogic 등) | 응용 프로그램 개발자, 웹 애플리케이션 서버 개발사 |
JDBC API | 자바 응용프로그램에서 데이터베이스를 연결하고 데이터를 제어할 수 있도록 데이터베이스 연결 및 제어를 위한 인터페이스와 클래스들 | JavaSE 개발사 (Sun microsystems, Oracle) |
JDBC Driver Manager | 자바 응용프로그램이 사용하는 데이터베이스에 맞는 JDBC 드라이버를 찾아서 로드합니다. | JavaSE 개발사 (Sun microsystems, Oracle) |
JDBC Driver | 각 데이터베이스 개발사에서 만든 데이터베이스 드라이버 | 데이터베이스 개발사(Oracle, MySql, PostgreSQL.. |
JDBC Type
- JDBC는 네가지 타입이 있다.
Type-1 Driver or JDBC-ODBC Bridge
- JDBC와 ODBC 사이의 브릿지 역할을 수행
- 사용하기는 쉽지만 속도가 느린 단점이 있다.
Type-2 Driver or Native API Partly Java Driver
type1
보다는 성능이 우수하지만 라이브러리 설치로 인해 비용이 증가- DB 제품의 변경에 취약
Type-3 Network Protocal Driver ( fully java driver )
- Type3 JDBC 드라이버는 JDBC 미들웨어 서버와 독점 프로토콜로 통신
- JDBC 미들웨어는 요청된 프로토콜을 데이터베이스 호출로 변환
- 데이터 베이스 변경에 유연하지만 많은 네트워크를 호출함으로 속도가 느리다.
Type-4 Thin Driver ( fully java driver )
- 가장 인기가 좋다
- DB와 다이렉트로 통신 → 순수 자바 드라이버
- 라이브러리와 미들 웨어 서버가 필요 없다.
- 성능적으로 가장 우수하다.
Java JDBC API
- JDBC API는 java 언어 차원에서 데이터 엑세스 제공
- JDBC API Package
- java.sql
- javax.sql
Java EE
애 있던jdbc
확장용 기능 → JDBC 3부터는 Java SE의 일부로 포함됨.java.sql
의 확장, 추가적인 기능
JDBC Architecture
- JDBC를 사용하여 Two-Tier 또는 Three-Tier 아키텍쳐를 구성 할 수 있습니다.
Two-Tier Architecture
- Client Layer - Server Layer로 구성 됩니다.
- 특정 DB와 통신에 있어 JDBC 드라이버가 필요합니다.
- Client 프로그램이 DB에 바로 접속하는 구성이라 확장성에 제한이 있을 수 있다.
- 클라이언트 - 서버 아키텍쳐라고 한다.
Three-Tier Architecture
- Three-tier 아키텍처는 비즈니스 로직을 담은 미들웨어가(Tomcat) 추가됩니다.
- 이 아키텍처는 사용자 PC에서 데이터베이스로 직접적인 통신은 없습니다.
- 사용자의 요청은 미들웨어로 전송됩니다.
- 데이터베이스의 처리 또한 결과를 미들웨어로 전송 시킨 뒤 사용자와 통신 \
JDBC 드라이버 로딩
MySQL JDBC 드라이버 로딩 (Reflection 활용)
1
Class.forName("com.mysql.cj.jdbc.Driver");
DB Connection 생성
1
Connection connection = DriverManager.getConnection(URL, user, password);
Statement
- Java에서 SQL 문을 실행하기 위해서는 Statement 클래스를 이용
- SQL 문의 결과를 얻어오는데에는 ResultSet 클래스를 이용
Statement 사용
Connection
객체를 사용해 결과를 보낸다.1
Statement statement = connection.createStatement();
PreparedStatement
를 사용하여 더 효율성을 높이기 가능1 2 3
PreparedStatment psmt = connection.prepareStatement("SQL data"); pstmt.setString(1, request.getParameter("username"); pstmt.setString(2, request.getParameter("email");
Statement의 Methods
executeQuery()
- SELECT 쿼리를 실행할 때 사용합니다.
- ResultSet 을 결과를 반환합니다.
executeUpdate()
- INSERT 등의 DDL을 실행하기 위해서 사용합니다.
- int 타입으로 성공 여부나 처리된 데이터 수를 반환합니다.
결과 받기
- 가져온 데이터를 처리하기 위해서는
ResultSet
객체가 필요하다. ResultSet
은 커서를 다룰 수 있게 한다. (초기행은 첫번째 행 이전)
JDBC 로딩
- DbUtils
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class DbUtils {
public DbUtils(){
throw new IllegalStateException("Utility class");
}
public static Connection getConnection() {
Connection connection = null;
try {
//todo connection.
connection = DriverManager.getConnection("jdbc:mysql://133.186.241.167:3306/nhn_academy_3","nhn_academy_3","Jc1?tjnLZWi7LTIH");
} catch (SQLException e) {
throw new RuntimeException(e);
}
return connection;
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.