제2장 tbJDBC의 사용

내용 목차

2.1. 개요
2.2. JDK 설치
2.3. JDBC의 표준 기능
2.3.1. JDBC 1.0 및 JDBC 2.0
2.3.2. JDBC 3.0
2.3.3. JDBC 4.0
2.4. 기본 프로그래밍
2.4.1. 접속
2.4.2. 실행
2.4.3. 호출
2.4.4. 커밋과 롤백
2.4.5. 접속 해제

본 절에서는 tbJDBC의 사용법과 JDBC의 기본 기능, 프로그래밍에 대해서 기술한다.

Tibero에서는 Java 프로그램 안에서 SQL 문장을 실행하기 위해 데이터베이스를 연결해주는 애플리케이션 프로그램의 인터페이스를 제공한다. 이러한 인터페이스를 tbJDBC(Tibero의 Java Database Connectivity)라 한다.

tbJDBC는 JDK 버전이 1.4 이상의 환경에서 동작한다. JDBC 4.0을 기능을 모두 사용하기 위해서는 JDK 6 이상의 환경을 사용하여야 한다. JDK 6 이상에서 사용할 수 있는 드라이버 파일은 tibero6-jdbc.jar 파일의 형태로 제공되며, JDK 버전이 1.4인 경우에는 tibero6-jdbc-14.jar 파일의 형태로 제공된다.

참고

본 안내서에서는 JDBC 프로그래밍에 대해 간략히 설명한다. tbJDBC에 대한 자세한 내용은 "Tibero JDBC 개발자 안내서"를 참고한다.

tbJDBC를 사용하기 위해서는 JDK 1.4 이상이 반드시 설치되어 있어야 한다.

다음 위치에서 JDK를 다운로드할 수 있다.

http://www.oracle.com/technetwork/java/javase/downloads/index.html

만약 시스템이 Oracle사의 JDK를 사용하지 않는다면 각각의 시스템에 적합한 JDK를 찾아 설치한다. 예를 들어 HP-UX는 HP, AIX는 IBM에서 JDK를 다운로드 받아 설치하면 된다.

각 시스템별 JDK를 설치하는 방법은 다음 위치에서 확인할 수 있다.

http://www.oracle.com/technetwork/java/index.html

참고

벤더별 JDK 설치 방법은 각 벤더에서 제공하는 설치 안내서를 참고한다.

tbJDBC는 JDBC 4.0 표준을 준수한다. 다만, 표준에 따르면 필수적으로 구현해야하는 부분과 벤더별로 구현여부를 선택 가능한 부분을 구분하여 명시하고 있으며, 이러한 추가 기능에 대해서는 지원하지 않을 수도 있다. 또한 JDBC 4.0은 아래의 JDBC 표준을 모두 포함한다.

  • JDBC 3.0 API

  • JDBC 2.0 API(JDBC 2.0 Optional Package API and JDBC 2.1 core API)

  • JDBC 1.2 API

  • JDBC 1.0 API

본 절에서는 tbJDBC에서 구현되는 표준 기능을 JDBC 버전 별로 간략히 설명한다. 보다 자세한 내용은 Sun사에서 발행한 JDBC 4.0 Specification 문서를 참고한다.

본 절에서는 JDBC 1.0 및 JDBC 2.0의 표준 기능을 지원 여부에 따라 각각 설명한다.

지원하는 기능

지원하지 않는 기능

  • SQL-99 데이터 타입

    tbJDBC는 SQL-99 데이터 타입 중에서 Array, Ref, Struct를 지원하지 않는다

  • 인터페이스 메소드

    지원하지 않는 인터페이스 메소드는 다음과 같다.

    • java.sql.Ref

    • java.sql.SQLData

    • java.sql.SQLInput

    • java.sql.SQLOutput

  • 잘린(Truncated) 데이터 대한 예외 상황

    JDBC 드라이버가 예기치 않게 데이터 값을 잘라낸 경우 읽기를 할 때에는 Data Truncation 경고, 쓰기를 할 때에는 Data Truncation 예외(Exception)를 발생시킨다.

본 절에서는 JDBC 3.0의 표준 기능을 지원 여부에 따라 각각 설명한다. JDBC 3.0 API는 J2SE platform, version 1.4 이상의 환경에서 사용할 수 있다.

지원하는 기능

지원하지 않는 기능

  • 추가된 데이터 타입

    타입설명
    java.sql.Types.DATALINKURL과 같은 외부 리소스의 접근을 제공한다.
    java.sql.Types.BOOLEANBIT 타입과 논리적으로 동일하다.
  • REF 객체에 의해 참조된 객체의 검색 및 수정

    REF 객체에 의해 참조된 객체를 검색하고, 수정할 수 있는 기능을 제공한다.

  • 그룹 변환 및 데이터 타입의 매핑

    JDBC API를 통해 사용자 정의 데이터 타입(UDT: User Defined Types)과 Java 클래스 간의 매핑 관계를 설정할 수 있다. 그러나 Tibero에서는 사용자 정의 데이터 타입을 지원하지 않는다.

본 절에서는 JDBC 4.0의 표준 기능을 지원 여부에 따라 각각 설명한다. JDBC 4.0 API는 Java SE platform, version 6 이상의 환경에서 사용할 수 있다.

지원하는 기능

  • 인터페이스

    지원하는 인터페이스는 다음과 같다.

    • java.sql.NClob

    • java.sql.RowId

    • java.sql.SQLXML

    • java.sql.Wrapper

    • javax.sql.StatementEventListener

  • SQL: 2003에 추가된 XML 데이터 타입 지원

    SQLXML 인터페이스를 통해 XML 데이터 타입을 사용할 수 있다.

  • 자동 java.sql.Driver 검출(Auto java.sql.Driver discovery)

    Class.forName을 사용한 java.sql.Driver 클래스의 로드 없이도 드라이버 객체를 사용할 수 있다.

  • 국가별 캐릭터 셋(National Character Set) 지원

    데이터베이스에서 별도로 지정해 사용하는 국가별 캐릭터 셋을 지원하기 위한 API가 추가되었다.

  • 향상된 SQLException

    연쇄적으로 연결된 예외를 생성할 수 있게 되어 보다 자세한 원인을 전달해 줄 수 있으며, 새로운 종류의 예외 타입이 추가되었다.

  • 향상된 Blob/Clob 기능

    Blob/Clob 객체를 생성/해제할 수 있는 API를 지원한다.

  • SQL ROWID 데이터 타입의 지원

    RowId 인터페이스를 이용하여 SQL ROWID 타입을 사용할 수 있다.

  • 실제 JDBC 객체에 대한 접근 허용

    Wrapper 인터페이스를 이용하여 애플리케이션 서버나 접속 풀링 환경에서도 실제 JDBC 객체에 접근해 사용할 수 있다.

  • 접속 풀링 환경에서 실제 접속 상태에 대한 통지

    접속 풀링 환경에서 실제 접속이 닫히거나 유효하지 않게 되었을 때 그 상태를 풀링된 문장에 통지해 준다.

지원하지 않는 기능

  • 사용자 정의 타입 조회 및 계층 구조 검색

    사용자 정의 타입의 속성 및 계층 구조를 조회할 수 있는 API가 추가되었다.

본 절에서는 tbJDBC에서 제공하는 인터페이스 메소드를 통해 기본적인 Java 프로그램을 작성하는 방법을 설명한다. 본 절에서 설명하고 있는 전체 소스 코드는 “Appendix A. tbJDBC 예제”를 참고한다.

다음은 public class가 포함된 JdbcTest 클래스 파일의 일부이다.


ⓐ JdbcTest라는 클래스를 통해 데이터베이스에 접속한다.

ⓑ ~ ⓓ 여러 종류의 멤버 함수를 수행한다.

ⓔ 데이터베이스 접속을 해제하는 작업을 수행한다.

다음 절부터는 위 예에서 ⓐ ~ ⓔ 사이에 구현된 멤버 함수를 각각 설명한다.

connect 멤버 함수는 기본 드라이버 관리자를 이용하여 데이터베이스에 접속(connection)하는 동작(ⓐ)을 수행한다. Java에서 기본 제공하는 java.sql.DriverManager 클래스를 통해 드라이버 관리자 기능을 사용할 수 있다.


구현된 내용을 차례대로 설명하면 다음과 같다.

  1. 사용할 드라이버에 해당하는 클래스를 지정하여 Class.forName 메소드를 호출한다.

    아래에서 드라이버 관리자를 사용하기 전에 사용할 드라이버를 미리 등록하는 과정이다. 사용할 드라이버에 해당하는 클래스의 이름을 지정하여, Java 가상머신이 드라이버 클래스를 로드하도록 한다.

  2. DriverManager.getConnection 메소드를 호출하여 드라이버 관리자를 통해 데이터베이스 연결을 생성한다. 사용자는 DriverManager.getConnection 메소드의 파라미터로 접속할 데이터베이스의 URL과 DB 사용자이름 및 비밀번호를 입력한다. DriverManager 클래스는 URL에 맞는 드라이버를 찾아 접속에 성공할 경우 데이터베이스 연결을 java.sql.Connection 인터페이스의 객체로 돌려준다. 이를 필드 변수 conn 에 할당한다.

  3. 드라이버 관리자가 URL에 적합한 드라이버를 찾지 못하거나, 드라이버에서 데이터베이스로의 접속에 실패한 경우에는 SQLException이 throw된다.

tbJDBC에서는 다른 데이터베이스의 클라이언트에서처럼 문장(statement)에 대한 개념이 존재한다. executeStatement 멤버 함수는 이러한 문장을 실행(execution)하는 기능(ⓑ)을 수행한다.


구현된 내용을 차례대로 설명하면 다음과 같다.

또한 준비된 문장(prepared statement)을 이용하면 파라미터를 바인딩하여 원하는 작업을 수행할 수 있다. executePreparedStatement 멤버 함수는 파라미터가 바인딩이 된 질의를 실행하는 기능(ⓒ)을 수행한다.


구현된 내용을 차례대로 설명하면 다음과 같다.

tbJDBC를 이용하여 작성한 프로그램에서 PL/SQL를 호출(call)할 수 있다. 이러한 문장을 호출 가능 문장(callable statement)이라고 한다. executeCallableStatement 멤버 함수는 호출 가능 문장을 실행하는 기능(ⓓ)을 수행한다.


구현된 내용을 차례대로 설명하면 다음과 같다.