이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다.
JDBC
자바는 데이터베이스와 연결해서 데이터 입출력 작업을 할 수 있도록 JDBC(Java Database Connectivity) 라이브러리 (java.sql 패키지)를 제공한다.
JDBC는 데이터베이스 관리시스템(DBMS)의 종류와 상관없이 동일하게 사용할 수 있는 클래스와 인터페이스로 구성되어 있다.
JDBC는 인터페이스다. 즉 구현 객체가 있어야 사용할 수 있다.
구현 객체는 JDBC Driver인데, 해당 구현 객체는 DBMS 제조사가 제공한다.
JDBC Driver는 DBMS 마다 별도로 다운로드받아 사용해야 한다.
위 그림은 상속 관계를 나타낸 그림이 아니다.
- DriverManager : JDBC Driver를 관리하며 DB와 연결해서 Connection 구현 객체를 생성
- Connection : Statement, PreparedStatement, CallableStatement 구현 객체를 생성하며, 트랜잭션 처리 및 DB 연결을 끊을 때 사용
- Statement : SQL의 DDL(Data Definition Language)과 DML(Data Manipulation Language)을 실행할 때 사용한다. 주로 변경되지 않는 정적 SQL 문을 실행할 때 사용한다.
- PreparedStatement : Statement와 동일하게 DDL, DML문을 처리할 때 사용한다.
차이점은 매개변수화된 SQL문을 사용할 수 있기 때문에 편리성과 보안성이 좋다. - CallableStatement : DB에 저장되어 있는 프로시저와 함수를 호출할 때 사용한다.
2023.11.19 - [데이터베이스/데이터베이스 개론] - SQL분류(DML, DDL, DCL, TCL)
DB 연결
DBMS는 서버이고 이 데이터베이스를 이용하는 프로그램은 클라이언트가 된다.
클라이언트 프로그램에서 DB와 연결하려면 해당 DBMS의 JDBC Driver가 필요하다.
또한 연결에 필요한 아래의 네가지 정보가 필요하다.
- IP주소 : 해당 데이터 베이스가 있는 컴퓨터에 들어가기 위한 주소
- 포트 번호 : 컴퓨터 내에서도 여러 포트중에 어디로 가야할지 정해주는 번호
- DB 계정 및 비밀번호 : 보안을 위한 과정
- DB 이름 : DBMS 안에도 여러 DB가 있기 때문에 어떤 DB에 연결할지
JDBC Driver - Build Path
DBMS사에서 제공하는 JDBC Driver를 다운로드를 받고, 자바 IDE에 해당 JAR 파일을 Build Path해준다.
JDBC Driver를 메모리로 로딩
로딩이란, 바이트 코드 파일을 메소드 영역에 올리는 것을 말한다.
Class.forName() 메소드는 문자열로 주어진 JDBC Driver 클래스를 Bulid Path에서 찾고, 메모리로 로딩한다.
Class.forName("oracle.jdbc.OracleDriver");//ojdbc8 안에 oracle.jdbc.OracleDriver를 로딩
Class.forName() 메소드는 매개값에 주어진 클래스 파일을 리턴하는데 이를 받아줄 변수가 없으면 해당 클래스 파일을 로딩만 해준다.
위 과정에서 JDBC Driver 클래스의 static 블록이 실행되면서 Driver Manager에 JDBC Driver 객체를 등록하게 된다.
class OracleDriver{
static { //메모리에 로딩
Driver dirver = new OracleDriver();
DriverManager.registerDriver(driver);
}
}
만약 Bulid Path에서 JDBC Driver 클래스를 찾지 못하면 ClassNotFoundException이 발생하므로 예외 처리를 해야한다.
Driver Manager에 JDBC Driver가 등록되면 getConnection() 메소드로 DB와 연결할 수 있다.
Connection conn = DriverManager.getConnection("연결 문자열", "사용자", "비밀번호");
첫 번째 매개값은 연결 문자열인데, DBMS마다 다른 형식을 가지고 있다.
아래는 Oracle의 연결 문자열을 보여준다.
jdbc:oracle:thin은 TCP용 JDBC Driver를 사용한다는 뜻이다.
이렇게 위에서 언급한 DB에 연결하기 위한 4가지 정보를 제공함으로써 DB에 연결할 수 있게된다.
사용 예제
Oracle SQL
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionExample {
public static void main(String[] args) {
Connection conn = null;
try {
//JDBC Driver 등록
Class.forName("oracle.jdbc.OracleDriver");
//연결하기
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521/orcl",
"java",
"oracle"
);
System.out.println("연결 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(conn != null) {
try {
//연결 끊기
conn.close();
System.out.println("연결 끊기");
} catch (SQLException e) {}
}
}
}
}
/*
연결 성공
연결 끊기
*/
MySQL
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionExample {
public static void main(String[] args) {
Connection conn = null;
try {
//JDBC Driver 등록
Class.forName("com.mysql.cj.jdbc.Driver");
//연결하기
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/thisisjava",
"java",
"mysql"
);
System.out.println("연결 성공");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(conn != null) {
try {
//연결 끊기
conn.close();
System.out.println("연결 끊기");
} catch (SQLException e) {}
}
}
}
}
'Java Category > Java' 카테고리의 다른 글
[Java] DB 프로시저와 함수 호출 (0) | 2023.08.19 |
---|---|
[Java] 데이터베이스에 저장(쓰기, 수정, 삭제) 및 읽기 (0) | 2023.08.18 |
[Java] TCP 채팅 프로그램 (0) | 2023.08.16 |
[Java] JSON 데이터 형식 (0) | 2023.08.15 |
[Java] 서버의 동시 요청 처리(스레드풀 이용) (0) | 2023.08.14 |