[Java] JDBC(Java DataBase Connectivity)

chael_lo·2021년 6월 24일
0

Java

목록 보기
43/52

JDBC란 자바를 이용하여 다양한 종류의 데이터베이스에 접근하여 각종 SQL문을 수행할 수 있도록 제공하는 API를 말한다.

각종 DBMS를 통합한 라이브러리 필요성

DBMS의 종류가 다양하고 구조와 특징이 달라서
자바는 모든 DBMS에서 공통적으로 사용할 수 있는 인터페이스와 클래스로 구성하는 JDBC를 개발하게 되었고, 실제 구현은 DBMS의 밴더에게 구현하도록 했다.

JDBC 인터페이스

JDBC 인터페이스는 JDBC 프로그램을 하기 위한 API들을 말하며 SE에서 제공하는 java.sql 패키지를 의미한다.

JDBC 드라이버

java.sql의 인터페이스들을 상속하여 메소드의 몸체를 구현한 클래스 파일을 뜻한다.
JDBC로 코딩하기 위해서는 DBMS를 선택하고, DBMS에서 제공하는 JDBC 드라이버가 반드시 필요하다.
접속 URL 주소로 DBMS 서버에 접속할 수 있는 기능을 제공한다.

JDBC의 역할

JDBC는 크게 JDBC 인터페이스JDBC 드라이버로 구성되어 있다.
응용프로그램에서는 SQL문 만들어 JDBC 인터페이스를 통해 전송하면
실제 구현 클래스인 JDBC 드라이버에서 DBMS에 접속을 시도하여 SQL문을 전송하게 된다.
JDBC의 역할은 응용프로그램(Application)과 DBMS의 Bridge 역할을 하게 된다.

JDBC의 구현

1. OracleDriver 클래스로 인스턴스를 생성하여 DriverManager 클래스에 JDBC Driver로 등록한다.

OracleDriver 클래스를 읽어 메모리에 저장한다.
OracleDriver 클래스의 정적영역에서 OracleDriver 클래스를 인스턴스로 생성하여 DriverManager 클래스에 JDBC Driver로 등록을 처리한다(1번 실행).

Class.forName("oracle.jdbc.driver.OracleDriver");

2. JDBC Driver를 이용하여 DBMS 서버에 접속하고 접속정보(Connection 인스턴스)를 반환받아 저장한다.

DriverManager.getConnection(String url, String user, String password)
DBMS 서버에 접속하는 메소드이며, 접속 성공시 Connection 인스턴스 반환한다.
메소드의 매개변수에 전달된 URL 정보에 따라 특정 DBMS 서버에 접속하며,
서버 접속이 실패하면 SQLException이 발생한다.

SQLException
JDBC 관련 인스턴스의 메소드에서 발생되는 예외를 말한다.
DBMS 서버에서 접속 오류 또는 SQL 명령에 문제가 있는 경우 예외가 발생한다.

///URL : 인터넷에 존재하는 자원을 표현하기 위한 주소
//Oracle DBMS Server에 대한 JDBC URL
String url="jdbc:oracle:thin:@localhost:1521:xe";
String user="scott";
String password="tiger";

//Connection : DBMS 서버의 접속정보를 저장하기 위한 인스턴스
//Connection 인터페이스의 참조변수에 자식 클래스의 인스턴스를 반환받아 저장
Connection con=DriverManager.getConnection(url, user, password);

3. 접속된 DBMS 서버에 SQL 명령을 전달하기 위한 Statement 인스턴스를 반환받아 저장한다.

Connection.createStatement()
Connection 인스턴스로부터 SQL 명령을 전달할 수 있는 Statement 인스턴스를 생성하여 반환하는 메소드다. 문제가 있는 경우 SQLException이 발생한다.
Statement
접속된 DBMS 서버에 SQL 명령을 전달하기 인스턴스다.

//Statement 인터페이스의 참조변수에 자식 클래스의 인스턴스를 반환받아 저장
Statement stmt=con.createStatement();

4. Statement 인스턴스로 접속된 DBMS 서버에 SQL 명령을 전달하여 실행하고 실행된 결과값을 반환받아 저장한다.

Statement.executeUpdate(String sql)
INSERT,UPDATE,DELETE 명령을 서버에 전달하는 메소드다.
조작행의 갯수(int) 반환하며, 문제가 있는 경우 SQLException이 발생한다.

tatement.executeQuery(String sql)
SELECT 명령을 서버에 전달하는 메소드다.
검색행(ResultSet 인스턴스)을 반환하며, 문제가 있는 경우 SQLException이 발생한다.

String sql="insert into student values(3000,'전우치','010-2871-7888','인천시 월미구','1997-05-06')";
int rows=stmt.executeUpdate(sql);

5. SQL 명령의 실행 결과를 처리(출력 또는 반환)한다.

int rows=stmt.executeUpdate(sql);
System.out.println("[메세지]"+rows+"명의 학생정보를 저장 하였습니다.");

6. JDBC 관련 인스턴스를 close() 메소드 호출을 통해 제거한다.

SQLException가 발생하므로 예외처리를 해주어야 한다.
인스턴스 생성의 반대 순서대로 제거한다.

try{
}catch(...){

}finally {//예외와 상관없이 실행될 명령을 작성
	try {
            //if 구문을 이용하여 NullPointerException 발생 방지
            if(stmt!=null) stmt.close();
            if(con!=null) con.close();//DBMS 서버 접속 해제
	} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}
}
profile
천천히 꾸준히

0개의 댓글