JDBC(Java DataBase Connectivity) API
API(Application Programming Interface)
java.sql 패키지 - JDBC API ojdbc11.jar
DriverManager 클래스 👉 Connection
DataSource 인터페이스 👉 Connection : 커넥션 풀
1) java.sql.* 패키지 임포트
2) JDBC 드라이버 로딩
public class Ex01 {
void test1(){ //동적로딩
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
3) 데이터베이스 접속을 위한 Connection객체 생성
DriverManage : 접속을 할때 마다 Connection 객체를 생성 👉 효울성❌, 성능❌Connection getConnection(...)(String url, String user, String password);DataSource 인터페이스 : 커넥션 풀을 제공하는 라이브러리 구현체 존재 (Tomcat JDBC, HikariCP)public class Ex01 {
void test1(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "STUDY";
String password = "oracle";
try {
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}catch(SQLException e){
e.printStackTrace();
}
}
}
4) 쿼리문을 실행하기 위한 Statement/PreparedStatement/CallableStatement 객체 생성
public class Ex01 {
void test1(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "STUDY";
String password = "oracle";
try(Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()){
}catch(SQLException e){
e.printStackTrace();
}
}
}
5) 쿼리 실행
1. Statement 객체로 데이터 접근
Connection
Statment createStatement()
1) ResultSet executeQuer(String sql)
2) int executeUpdate(String sql)
6) 쿼리 실행 결과 값(int, ResultSet) 사용
7) 사용된 객체(ResultSet, Statement/PreparedStatement/CallableStatement, Connection) 종료
1) JDBC 드라이버 로딩하기
2) Connection 객체 생성하기
3) 데이터베이스 연결 닫기
1) ResultSet executeQuery(String sql)
2) int executeUpdate(String sql)
3) close()
1) 동적인 쿼리에 사용
2) 하나의 객체로 여러 번의 쿼리를 실행할 수 있으며, 동일한 쿼리문을 특정 값만 바꾸어서 여러 번 실행해야 할 때, 매개변수가 많아서 쿼리문을 정리해야 할 때 유용
CallableStatement 객체로 데이터 접근하기
1) 프로시저 실행시 사용
쿼리문 실행 결과 값 가져오기
1) ResultSet 객체의 메서드
의존성 : tomcat-jdbc
public class Ex03 {
/* DB 연결 URL, 계정 */
private String url = "jdbc:oracle:thin:@localhost:1521:XE";
private String user = "STUDY"; // SCOTT
private String password = "oracle"; // tiger
@BeforeAll
static void init() {
try {
// 오라클 드라이버 동적 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Test
void test1() {
String sql = "CALL REGISTER_MEMBER(?, ?, ?, ?)";
try (Connection conn = DriverManager.getConnection(url, user, password);
CallableStatement cstmt = conn.prepareCall(sql)) {
cstmt.setString(1, "USER99");
cstmt.setString(2, "123456");
cstmt.setString(3, "사용자99");
cstmt.setString(4, "01000000000");
int cnt = cstmt.executeUpdate();
System.out.println(cnt);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
void test2(){
DataSource ds = new DataSource();
// DB 연결 설정 S
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
ds.setUsername("STUDY");
ds.setPassword("oracle");
// DB 연결 설정 E
// 커넥션 풀 설정 S
ds.setInitialSize(2); //로드 초기에 생성할 연결 객체 수 - 기본값 10
ds.setMaxActive(10); //최대 생성할 연결 객체 수 - 기본값 100
ds.setTestWhileIdle(true); //연결 객체가 유휴 상태일 때 연결 상태 체크
ds.setTimeBetweenEvictionRunsMillis(5 * 1000); //5초에 한번씩 연결 상태 체크
ds.setMinEvictableIdleTimeMillis(30 * 1000); //유휴 상태 객체 30초 이후에 새로 생성
// 커넥션 풀 설정 E
// Connection 객체 생성 S
try(Connection conn = ds.getConnection()){
System.out.println(conn);
}catch(SQLException e){
e.printStackTrace();
}
// Connection 객체 생성 E
//
}
}
package exam01;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import javax.xml.crypto.Data;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Ex03 {
/* DB 연결 URL, 계정 */
private String url = "jdbc:oracle:thin:@localhost:1521:XE";
private String user = "STUDY"; // SCOTT
private String password = "oracle"; // tiger
@BeforeAll
static void init() {
try {
// 오라클 드라이버 동적 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Test
void test3(){
// 연결 설정 S
HikariConfig config = new HikariConfig();
config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
config.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE");
config.setUsername("STUDY");
config.setPassword("oracle");
// 연결 성정 E
// 커넥션 풀 성정 S
config.setMinimumIdle(2);
config.setMaximumPoolSize(10);
// 커넥션 풀 성정 E
// DataSource 객체 생성
HikariDataSource ds = new HikariDataSource(config);
// Connection 객체 생성
try(Connection conn = ds.getConnection()){
System.out.println(conn);
}catch(SQLException e){
e.printStackTrace();
}
}
}