JDBC(Java Database Connectivity) 는 어떤 환경에서건 자바 언어를 사용하는 경우에 DBMS 종류에 상관없이 데이터베이스에 접근할 수 있는 독립적인 프로그래밍 API이다.
다음은 JDBC를 구현하는 기본적인 프로그램을 개발하는 순서이다.
💡 실행환경 : Oracle , Eclipse
1. Eclipse 에서 프로젝트 생성
DB와 연동할 자바 프로젝트 하나 생성 후 Build Path
> Configure Build Path
> Add External Jars
2. Oracle 드라이버를 현재 생성한 Eclipse 프로젝트와 연결
벤더에서 제공해준 클래스파일(드라이버)가 필요하다. RDBMS의 버전마다 다르다.
위치 : C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
3. Oracle DB를 연동하기 위한 4가지 정보를 문자열에 저장
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String userid = "SCOTT"; // 계정명
String passwd = "TIGER"; // 비번
- oracle.jdbc.driver 패키지내에 있는 OracleDriver 클래스를
driver
변수에 저장 - Oracle의 위치 및 포트번호, DB명의 정보를
url
변수에 저장 (Oracle 11g 버전인 경우에는 DB명이 XE로 고정) - 접속하고자하는 계정명과 비밀번호를
userid
,passwd
변수에 저장
4. 드라이버 로딩
OracleDriver 클래스 파일을 메모리에 로딩한다.
Class.forName(driver);
5. 자바코드와 Oracle DB Connection
java.sql 패키지의 Connection을 사용한다. 앞에서 저장했던 url
,userid
,passwd
값을 이용한다.
Connection con = DriverManager.getConnection( url, userid , passwd );
6. SQL문 작성
자바에서 데이터베이스로 요청할 SQL문을 문자열로 저장한다. 주의할 점은 ; 세미콜론
은 입력하지 않는다.
String query = "SELECT deptno,dname,loc FROM dept";
7. PreparedStatement 생성
요청할 SQL문을 전송할 때 사용되는 API 이다.
PreparedStatement pstmt = con.prepareStatement( query );
8. SQL문 전송 및 결과값 얻기
요청하는 SQL문에 따라서 2가지 메서드를 사용할 수 있다.
8.1 SELECT 요청
결과로 테이블이 출력된다.
ResultSet rs = pstmt.executeQuery( );
ResultSet 객체는 포인터를 이용해서 원하는 데이터를 얻는다. 포인터를 이용해서 레코드를 선택하고 레코드의 컬럼을 지정해서 데이터를 얻는다. 컬럼은 데이터타입에 따라서 getInt(컬럼명)
, getString(컬럼명)
메서드를 사용한다. 결과값의 레코드가 여러 개 있을 수 있기에 while문을 사용하며 next()
메서드를 이용하여 레코드를 선택한다.
while(rs.next()){
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println( deptno +" " + dname + " " +loc );
}
8.2 DML 요청 (INSERT, UPDATE, DELETE )
int n = pstmt.executeUpdate( );
DML요청의 결과로 변경된 레코드의 개수가 출력된다. 컬럼은 데이터타입에 따라서 setInt(위치, 컬럼명)
setString(위치, 컬럼명)
메서드를 사용한다.
9. 사용했던 API close
자바에서 사용하는 외부 자원이기 때문에 반드시 사용한 다음에는 자원을 해제시켜야 된다. 자원을 해제 시킬 때에는 사용한 역순으로 해제 시킨다. 데이터베이스를 사용시 예외가 발생되거나 발생되지 않거나 항상 자원을 해제시켜야 되기 때문에 일반적으로 finally문
에 자원 해제코드를 구현한다.
if( rs !=null) rs.close(); // ResultSet을 사용한 경우
if( pstmt !=null) pstmt.close();
if( con !=null) con.close();
JDBC API 사용 흐름

👀 최종 코드 - SELECT문 요청
import java.sql.*;
public class SelectTest {
public static void main(String[] args) throws SQLException {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String userid = "SCOTT";
String passwd = "TIGER";
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, userid, passwd);
String sql = "select deptno, dname, loc from dept";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println(deptno + "\t" + dname + "\t" + loc);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if( rs !=null) rs.close(); // ResultSet을 사용한 경우
if( pstmt !=null) pstmt.close();
if( con !=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
✨DML (INSERT, UPDATE, DELETE) 요청은 아래 게시글 참고
[JDBC] INSERT문/UPDATE문/DELETE문 요청
✨ JDBC 실행 순서와 SELECT 요청은 아래 게시글 참고 [JDBC] JDBC 실행 순서 정리 ✍️ JDBC(Java Database Connectivity) 는 어떤 환경에서건 자바 언어를 사용하는 경우에 DBMS 종류에 상관없이 데이터베이스에
gangintheremark.tistory.com
'Framework & Library > JDBC' 카테고리의 다른 글
[JDBC] JDBC 트랜잭션 처리 (0) | 2023.08.03 |
---|---|
[JDBC] DAO 및 DTO 패턴 사용 실습 (1) | 2023.08.03 |
[JDBC] DAO 패턴 및 DTO 패턴 (0) | 2023.08.02 |
[JDBC] INSERT문/UPDATE문/DELETE문 요청 (0) | 2023.08.01 |