콘텐츠로 이동

1. JDBC 시작하기#

이 장에서는 Altibase의 JDBC 드라이버를 이용하는 기본적인 방법을 기술한다.

JDBC 드라이버 설치#

Altibase 기술지원포털에서 다운로드 받은 Altibase 패키지를 다운로드 하여 설치한다.

Altibase JDBC 드라이버는 패키지를 설치한 후, $ALTIBASE_HOME/lib 디렉토리에서 찾을 수 있다.

버전 호환성#

Altibase 7.3 JDBC 드라이버는 Type 4 pure Java JDBC 드라이버로써, JDBC 4.2 API를 준수(일부 기능 제외)한다. 또한, JRE 1.8 이상에서 정상적으로 동작한다. 알티베이스 JDBC에서 지원하는 JDBC 4.2 API는 JDBC 4.2 API References에서 확인할 수 있다.

JDBC 드라이버 버전 확인#

설치된 JDBC 드라이버의 버전과 드라이버가 컴파일된 JDK 버전을 아래와 같이 확인할 수 있다.

$ java -jar $ALTIBASE_HOME/lib/Altibase.jar
Altibase 7.3.0.0.0 with CMP 7.1.8 for JDBC 4.2 compiled with JDK 8

CLASSPATH 설정#

Altibase JDBC를 사용하려면 Altibase JDBC 드라이버를 CLASSPATH 환경변수에 추가해야 한다.

Altibase는 로깅 기능을 지원하지 않는 Altibase.jar 파일과 지원하는 Altibase_t.jar 파일을 함께 제공한다.

ex) 유닉스 환경에서 bash 쉘을 사용하는 경우

$ export CLASSPATH=$ALTIBASE_HOME/lib/Altibase.jar:.:$CLASSPATH

LD_LIBRARY_PATH 설정#

비동기적 prefetch의 auto-tuning 기능을 사용할 경우에는 JNI 모듈이 필요하며 libaltijext.so 파일이 위치한 디렉토리를 LD_LIBRARY_PATH 환경변수에 추가하여야 한다. JNI 모듈을 로딩하는데 실패하더라도 auto-tuning 이외의 기능은 정상 동작한다.

ex) 유닉스 환경에서 bash 쉘을 사용하는 경우

$ export LD_LIBRARY_PATH=$ALTIBASE_HOME/lib:.:$LD_LIBRARY_PATH


데이터베이스에 연결하기#

이 절에서는 JDBC로 Altibase 서버에 연결하는 기본적인 방법을 프로그램 코드로 설명한다.

드라이버 로딩#

Altibase JDBC 드라이버의 Driver 클래스를 로딩하고, 드라이버를 찾아오는 방법이다.

  1. DriverManager에 Altibase JDBC 드라이버를 등록한다.

    Class.forName("Altibase.jdbc.driver.AltibaseDriver");
    
  2. 연결 URL을 사용해서 DriverManger에서 드라이버를 획득할 수 있다.

    String sURL = "jdbc:Altibase://localhost:20300/mydb";
    Driver sDriver = DriverManager.getDriver( sURL );
    

연결 정보 설정#

Properties 객체를 사용해서 다수의 연결 정보를 드라이버에 전달할 수 있다. 다음은 Properties 객체에 연결 속성을 셋팅하는 코드 예제이다.

Properties sProps = new Properties();
sProps.put("user", "SYS");
sProps.put("password", "MANAGER");

데이터베이스에 접속#

연결 URL과 연결 정보를 사용해서 데이터베이스에 접속할 수 있다. 다음은 데이터베이스에 연결하고 Connection 객체를 획득하는 코드 예제이다.

Connection sCon = sDriver.connect(sURL, sProps);

위의 connect 메소드의 인자로 사용되는 연결 URL의 형식은 아래와 같다.

jdbc:Altibase://server_ip:server_port/dbname

예제#

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Properties;
public class ConnectionExample
{
    public static void main(String[] args) throws Exception
    {
        String sURL = "jdbc:Altibase://localhost:20300/mydb";
        Properties sProps = new Properties();
        sProps.put("user", "SYS");
        sProps.put("password", "MANAGER");
        Class.forName("Altibase.jdbc.driver.AltibaseDriver");
        Driver sDriver = DriverManager.getDriver(sURL);
        Connection sCon = sDriver.connect(sURL, sProps);
    }
}

컴파일과 실행#

아래와 같이 JDBC 응용프로그램을 컴파일하고 실행할 수 있다.

$ javac ConnectionExample.java
$ java ConnectionExample


연결 정보#

이 절에서는 Altibase에 접속할 때 사용 가능한 연결 속성들의 정보를 기술하고, 연결 속성을 설정하는 방법에 대해 설명한다.

연결 속성 설정하기#

데이터베이스 접속에 필요한 연결 속성을 Properties 객체에 설정하거나 연결 URL에 명시할 수 있다.

연결 URL 사용하기#

연결 URL 끝에 "?"를 붙이고 그 뒤에 "key=value" 형식으로 프로퍼티 값을 지정할 수 있다. 여러 개의 프로퍼티를 입력할 때는 "&"로 연결하면 된다.

다음은 연결 URL의 예제이다.

"jdbc:Altibase://localhost:20300/mydb?fetch_enough=0&time_zone=DB_TZ"

다음은 conntype으로 인피니밴드(InfiniBand)를 사용하는 경우의 연결 URL 예제이다.

String url = "jdbc:Altibase://127.0.0.1:20300/mydb?conntype=ib&ib_latency=true"

Properties 객체 사용하기#

Properties 객체를 생성하고 키와 값을 입력한 다음, 연결 정보로 이용하면 된다.

아래는 Properties 객체를 사용하는 예제이다.

Properties sProps = new Properties();
sProps.put("fetch_enough", "30");
sProps.put("time_zone", "DB_TZ");

...

Connection sCon = DriverManager.getConnection( sURL, sProps );

연결 속성 정보#

Altibase에 접속할 때 사용 가능한 연결 속성에 대해 기술한다. 각 속성에 대한 기술에는 다음의 항목들이 포함된다.

  • 기본값: 명시하지 않을 경우 기본적으로 사용되는 값

  • 값의 범위: 지정 가능한 값

  • 필수 여부: 반드시 지정해야 하는지 여부

  • 설정 범위: 설정한 속성이 시스템 전체에 영향을 미치는지 또는 해당 세션에만 영향을 미치는지 여부

  • 설명: 속성에 대한 설명

alternateservers#

기본값
값의 범위 [ host_name:port_number[/dbname] [, host_name:port_number[/dbname] ]*
필수 여부 No
설정 범위
설명 Connection Failover 발생 시 접속할 수 있는 서버들의 리스트이다.
사용법은 3장의 "JDBC와 Failover" 절을 참고한다.

app_info#

기본값
값의 범위 임의의 문자열
필수 여부 No
설정 범위 세션
설명 V$SESSION의 CLIENT_APP_INFO 칼럼에 저장될 문자열을 지정한다.

auto_commit#

기본값 true
값의 범위 [true | false]
필수 여부 No
설정 범위 세션
설명 구문의 수행이 완료될 때 트랜잭션이 자동으로 커밋될 지 여부를 지정한다.

defer_prepares#

기본값

off

값의 범위

[on | off]

필수 여부

No

설정 범위

세션

설명

prepareStatement()가 호출될 때 서버와의 통신을 보류할지 여부(ON, OFF)를 지정할 수 있다.
이 속성이 ON이면, prepareStatement()가 호출이 되더라도 execute() 메소드가 호출될 때까지
prepare 요청이 서버로 전송되지 않는다.
반면에 이 속성이 OFF이면, prepareStatement()가 호출될 때 prepare 요청이 즉시 서버로 전송된다.
또한 예외적으로 defer_prepares 속성이 활성화된 상태이더라도 prepareStatement() 뒤에 다음의 메소드들이 호출되면, prepare 요청이 즉시 서버로 전송된다.

  • getMetData
  • getParameterMetaData
  • setObject(int, Object, int)
  • setBigDecimal(int, BigDecimal)

제약사항

  • 바인드 변수가 없을 때 강제로 setXXX를 이용해 값을 바인드하면 에러가 발생하는 것이 원칙이지만, deferred 옵션을 사용한 경우에는 예외적으로 에러가 발생하지 않는다.
  • nchar, nvarchar 타입 칼럼에 값을 바인딩 할 때, deferred 옵션을 사용하는 경우 반드시 setNString() 메서드를 사용해야 한다. deferred 옵션을 사용하지 않을 때는 setString() 메서드도 사용 가능하다.

ciphersuite_list#

기본값 JRE가 지원하는 모든 cipher suite list를 참조한다.
값의 범위 임의의 문자열
필수 여부 No
설정 범위 N/A
설명 서버에 SSL 통신을 위해 사용할 암호 알고리즘 목록이다.

clientside_auto_commit#

기본값

off

값의 범위

[on | off]

필수 여부

No

설정 범위

세션

설명

Autocommit의 동작을 Altibase 서버가 제어할 것인지, JDBC 드라이버가 제어할 것인지를 설정한다.
auto_commit 속성이 true이거나 auto_commit 속성이 지정되지 않은 경우에만 이 속성의 설정 값이 적용된다.

  • on: JDBC 드라이버가 자동커밋 제어
  • off: Altibase 서버가 자동커밋 제어

자세한 설명은 3장의 "Autocommit 제어" 절을 참고한다.

connectionretrycount#

기본값 0
값의 범위 Unsigned Integer 범위내의 숫자값 [1 - 231]
필수 여부 No
설정 범위
설명 Connection Failover 발생 시, 타 서버로 재접속을 시도하는 횟수를 지정한다.
이 값이 1일 경우 타서버로 재시도 횟수는 한 번이므로, 총 두 번의 접속 시도를 한다.
사용법은 3장의 "JDBC와 Failover" 절을 참고한다.

connectionretrydelay#

기본값 0
값의 범위 Unsigned Integer 범위내의 숫자값 [1 - 231]
필수 여부 No
설정 범위
설명 Connection Failover 발생 시, ConnectionRetryCount가 설정되어 있는 경우,
다른 서버로 재접속을 시도하는 대기 시간을 설정한다.
단위는 초(second)이다.
사용법은 3장의 "JDBC와 Failover" 절을 참고한다.

conntype#

기본값 0
값의 범위 [ 0 |TCP |6 |SSL |8 |IB ]
필수 여부 No
설정 범위 세션
설명 0: TCP ,
6 : SSL,
8: IB , conntype을 IB로 설정한 경우 IB_LATENCY의 연결속성을 설정할 수 있다.

database#

기본값 mydb
값의 범위 데이터베이스 이름
필수 여부 No
설정 범위 N/A
설명 접속을 시도할 Altibase 서버에 생성한 데이터베이스의 이름

datasource#

기본값
값의 범위 [0 - 65535]
필수 여부 Datasource 사용시 필수
설정 범위 N/A
설명 DataSource 이름

date_format#

기본값 ALTIBASE_DATE_FORMAT 환경 변수에 설정된 값.
환경 변수가 설정되어 있지 않으면, 날짜 타입의 입출력 형식은 서버의 설정 값을 따른다.
값의 범위 날짜 형식의 문자열
필수 여부 No
설정 범위 시스템
설명 DATE 타입의 입/출력 포맷을 지정하는 속성이다.
포맷이 설정되면, 클라이언트에서 해당 포맷을 따르지 않은 데이터를 입력할 경우,
DATE 타입으로 간주하지 않고, 에러를 반환한다.

ddl_timeout#

기본값 0
값의 범위 Unsigned Integer 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 DDL문 수행 시간의 한계값을 설정한다.
수행 시간이 이 시간을 넘어가면 구문의 수행이 취소된다.
단위는 초(sec)이다.
이 값이 0이면 무한대를 의미한다.

description#

기본값
값의 범위 임의의 문자열
필수 여부 No
설정 범위 N/A
설명 DataSource의 Description 부분

fetch_async#

기본값 Off
값의 범위 [off | preferred ]
필수 여부 No
설정 범위
설명 비동기적으로 prefetch를 수행하여 fetch 성능을 향상시킨다.
off: 동기적으로 prefetch를 수행한다.(기본값)
preferred: 비동기적으로 prefetch를 수행한다.
명령문마다 비동기 prefetch를 설정할 수 있지만 접속 당 하나의 명령문만 prefetch가 비동기적으로 수행된다.

fetch_auto_tuning#

기본값 on (Linux 인 경우)
이외의 경우는 off
값의 범위 [ on | off ]
필수 여부 No
설정 범위
설명 비동기적으로 prefetch 를 수행할 경우, 네트워크 상태에 따라 auto-tuning 할 것인지 여부를 지정한다.
Auto-tuning이란 네트워크 상태에 따라 prefetch row 개수를 자동으로 조절해주는 기능이다.
이 기능은 리눅스에서만 사용할 수 있다.
off: auto-tuning 기능을 사용하지 않는다. (리눅스 이외의 OS 에서 기본값)
on: auto-tuning 기능을 사용한다. (리눅스에서 기본값)

fetch_enough#

기본값 0
값의 범위 [0 - 2147483647]
필수 여부 No
설정 범위 세션
설명 현재 세션의 FetchSize를 설정한다.
한 번의 Fetch 연산으로 서버에서 한 번에 가져올 행의 개수를 의미한다.
이 값이 0이면, JDBC 드라이버는 한 네트워크 패킷에 담을 수 있는 최대 크기만큼
서버로부터 데이터를 가지고 온다.

fetch_timeout#

기본값 60
값의 범위 Unsigned Integer 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 SELECT문 수행 시간의 한계값을 설정한다.
질의 수행 시간이 설정된 시간을 넘어가면 질의는 자동으로 종료된다.
단위는 초(sec)이다.
이 값이 0이면 무한대를 의미한다.

ib_latency#

기본값 false
값의 범위 [true | false]
필수 여부 No
설정 범위 세션
설명 CPU 자원을 더 사용하여 Latency를 낮추기 위해서는 true로 설정한다.

idle_timeout#

기본값 0
값의 범위 Unsigned Integer 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 아무런 작업도 하지 않은 채로 Connection이 연결을 유지하는 시간의 한계값을 설정한다.
이 시간을 넘어가면 접속은 자동으로 해제된다.
단위는 초(sec)이다. 이 값이 0이면 무한대를 의미한다.

isolation_level#

기본값
값의 범위 [2 | 4 | 8]
필수 여부 No
설정 범위 시스템
설명 2 : TRANSACTION_READ_COMMITTED
4 : TRANSACTION_REPEATABLE_READ
8: TRANSACTION_SERIALIZABLE

keystore_password#

기본값 N/A
값의 범위 임의의 문자열
필수 여부 No
설정 범위 N/A
설명 keystore_url에 비밀번호를 지정한다.

keystore_type#

기본값 JKS
값의 범위 [ JKS, JCEKS, PKCS12 외]
필수 여부 No
설정 범위 N/A
설명 keystore_url의 keystore 타입을 설정한다.

keystore_url#

기본값 N/A
값의 범위 임의의 문자열
필수 여부 No
설정 범위 N/A
설명 KeyStore의 경로를 지정한다.
KeyStore는 개인 인증서와 공개 인증서를 가지고 있다.

loadbalance#

기본값 off
값의 범위 [ on | off ]
필수 여부 No
설정 범위
설명 AlternateServers 에 기술된 서버로의 접속 방식을 지정한다.
off 로 설정하면 최초 접속 시에는 기본 서버에 접속을 시도하고, 접속에 실패하면 AlternateServer로 지정된 서버에 순서대로 접속을 시도한다. session time failover 발생 시엔 기존 접속했던 서버에 다시 접속을 시도해보고 실패할 경우 순서대로 접속을 시도한다.
on 으로 설정하면 최초로 접속을 시도할 서버는 기본 서버와 AlternateServer 중에서 랜덤으로 선택하여 접속한다. session time failover 발생 시엔 기존 접속했던 서버에 다시 접속을 시도해보고 실패할 경우 랜덤하게 접속을 시도한다.

lob_cache_threshold#

기본값 8192
값의 범위 [0 - 524288]
필수 여부 No
설정 범위 세션
설명 클라이언트에 캐시할 수 있는 LOB 데이터의 최대 크기를 설정한다.

lob_null_select#

기본값 off
값의 범위 [on | off ]
필수 여부 No
설정 범위 세션
설명 lob 칼럼값이 null일때 ResultSet.getBlob(), ResultSet.getClob()이 LOB 객체를 반환하는지 여부
- off: null을 반환한다.
- on: LOB 객체를 반환한다.

login_timeout#

기본값
값의 범위 Unsigned Integer 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 로그인 대기 최대 시간을 설정한다.
자세한 내용은 3장의 "타임아웃" 절을 참고한다.

max_statements_per_session#

기본값
값의 범위 Signed Short 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 한 세션에서 실행 가능한 구문(statement)의 최대 개수를 지정한다.
이 값이 0이면 무한대를 의미한다.

ncharliteralreplace#

기본값 false
값의 범위 [true | false]
필수 여부 No
설정 범위 세션
설명 SQL문 내에 NCHAR 문자열(리터럴)의 존재 여부를 클라이언트에서 검사할지를 지정한다.

prefer_ipv6#

기본값 false
값의 범위 [true | false]
필수 여부 No
설정 범위
설명 IPv6 주소를 그대로 사용할 것인지, IPv4로 변환해서 사용할 것인지를 지정한다.
자세한 설명은 "IPv6 접속" 절을 참고하라.

password#

기본값
값의 범위
필수 여부 Yes
설정 범위 N/A
설명 사용자 ID의 비밀번호

port#

기본값 20300
값의 범위 [0 - 65535]
필수 여부 No
설정 범위 N/A
설명 접속을 시도할 Altibase 서버의 포트번호를 지정한다.
ssl_enable의 값이 false이면 20300, true이면 20443이 사용된다.

privilege#

기본값
값의 범위 [normal | sysdba]
필수 여부 No
설정 범위 N/A
설명 접속 모드
normal: 일반 모드
sysdba: DBA 모드

query_timeout#

기본값 600
값의 범위 Unsigned Integer 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 질의 수행 시간의 한계값을 설정한다. 수행 시간을 넘어서는 질의는 자동으로 종료된다.
단위는 초(sec)이다.
이 값이 0이면 무한대를 의미한다.

remove_redundant_transmission#

기본값 0
값의 범위 [0|1]
필수 여부 No
설정 범위 세션
설명 CHAR, VARCHAR, NCHAR, NVARCHAR 타입의 문자열에 중복 데이터 압축 방식을
사용할 것인지를 설정한다.

response_timeout#

기본값
값의 범위 Unsigned Integer 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 응답 대기 최대 시간을 설정한다.
자세한 내용은 3장의 "타임아웃" 절을 참고한다.

reuse_resultset#

기본값 true
값의 범위 [true | false]
필수 여부 No
설정 범위 세션
설명 동일한 PreparedStatement 객체에서 executeQuery() 메소드를 사용하여 ResultSet 객체를 여러 번 생성한 경우 첫 번째 ResultSet 객체의 재사용 여부를 설정한다. true는 ResultSet 객체를 재사용한다. 먼저 생성한 ResultSet 객체에 close() 메소드를 사용하면 자원이 해제되어 다른 ResultSet 객체 사용 시 오류가 발생한다. 이를 방지하려면 먼저 생성한 ResultSet 객체의 자원을 해제하고 다음 ResultSet 객체를 생성해야 한다. false는 ResultSet 객체를 재사용하지 않는다.

sessionfailover#

기본값 off
값의 범위 [on | off]
필수 여부 No
설정 범위
설명 STF(Session Time Failover) 사용 여부를 설정한다.
사용법은 3장의 "JDBC와 Failover" 절을 참고한다.

server#

기본값 localhost
값의 범위 본 매뉴얼의 2장 기본 기능의 "IPv6 접속" 절을 참고한다.
필수 여부 Yes
설정 범위 N/A
설명 접속을 시도할 Altibase 서버의 IP 주소 또는 호스트명

socket_immediate_close#

기본값 false
값의 범위 [ true | false ]
필수 여부 No
설정 범위 세션
설명 TCP 소켓 옵션인 SO_LINGER의 활성화 여부를 설정한다.
- true: SO_LINGER 값을 0으로 설정한다. 소켓을 닫는 즉시 연결이 종료되고 남아있는 데이터는 전송되지 않는다.
- false: SO_LINGER를 비활성화한다. 소켓은 바로 닫히지만, 소켓 버퍼에 남아있는 데이터가 있다면 커널은 일정 시간 동안 데이터를 보내려고 시도한다.
이 연결 속성은 Altibase JDBC 드라이버 7.3.0.0.7 이상부터 지원한다.

sock_rcvbuf_block_ratio#

기본값 0
값의 범위 [ 0 - 216 ]
필수 여부 No
설정 범위
설명 소켓 수신 버퍼의 크기를 32K 단위로 설정한다.
만약 이 속성의 값이 2로 설정되었다면 소켓 수신 버퍼의 크기는 64K 가 된다.
이 속성의 값이 설정되지 않았을 경우, ALTIBASE_SOCK_RCVBUF_BLOCK_RATIO 환경 변수를
참조하여 값을 설정한다.
TCP kernel parameter 중 최대 소켓 수신 버퍼 크기가 이 속성값에 의해 설정된 소켓 수신
버퍼 크기 미만으로 설정되어 있을 경우, 이 속성 은 OS에 따라 무시되거나 에러를 발생시킬 수
있다. (Linux OS 인 경우, 'net.core.rmem_max' TCP kernel parameter에 해당된다)

ssl_enable#

기본값 false
값의 범위 [true | false ]
필수 여부 No
설정 범위 세션
설명 서버에 SSL 통신을 사용해서 접속할지 여부를 설정한다.
자세한 내용은 SSL/TLS User's Guide를 참조한다.

time_zone#

기본값 DB_TZ(데이터베이스에 설정된 타임존을 이용)
값의 범위
필수 여부 No
설정 범위 세션
설명 타임존을 설정한다.
자세한 내용은 General Reference의 TIME_ZONE 프로퍼티를 참고하도록 한다.

truststore_password#

기본값 N/A
값의 범위 임의의 문자열
필수 여부 No
설정 범위 N/A
설명 truststore_url의 비밀번호를 지정할 수 있다.

truststore_type#

기본값 JKS
값의 범위 [ JKS, JCEKS, PKCS12 외]
필수 여부 No
설정 범위 N/A
설명 truststore_url의 TrustStore 타입을 설정한다.

truststore_url#

기본값 N/A
값의 범위 임의의 문자열
필수 여부 No
설정 범위 N/A
설명 TrustStore의 경로를 지정한다.
TrustStore는 CA의 인증서를 갖고있는 KeyStore이다.

user#

기본값
값의 범위
필수 여부 Yes
설정 범위 N/A
설명 접속할 데이터베이스의 사용자 ID

utrans_timeout#

기본값 3600
값의 범위 Unsigned Integer 범위내의 숫자값
필수 여부 No
설정 범위 세션
설명 UPDATE문 수행 시간의 한계값을 설정한다.
수행 시간이 이 시간을 넘어가면 구문이 자동으로 종료된다.
단위는 초(sec)이다. 이 값이 0이면 무한대를 의미한다.

verify_server_certificate#

기본값 true
값의 범위 [true | false ]
필수 여부 No
설정 범위 N/A
설명 서버의 CA 인증서를 인증할지 여부를 설정한다.
이 값을 FALSE로 설정하면, 클라이언트의 애플리케이션은 서버의 CA 인증서를 인증하지 않는다.

getprocedures_return_functions#

기본값 true
값의 범위 [true | false ]
필수 여부 No
설정 범위 N/A
설명 DatabaseMetaData.getProcedures(), DatabaseMetaData.getProcedureColumns() 메소드 반환 결과에 저장 함수의 포함 여부를 설정한다.
true는 저장 함수를 포함한다. false는 저장 함수를 포함하지 않는다. 저장 함수 정보를 얻으려면 DatabaseMetaData.getFunctions()와 DatabaseMetaData.getFunctionColumns()를 사용해야 한다.

getcolumns_return_jdbctype#

기본값 true
값의 범위 [true | false ]
필수 여부 No
설정 범위 N/A
설명 DatabaseMetaData.getColumns 메서드의 반환 결과 중 DATA_TYPE 값을 정의한다.
true는 JDBC API에서 정의한 java.sql.Types의 SQL 데이터 형식으로 반환하고 false는 V$DATATYPE에
정의된 데이터 타입 형식으로 반환한다.

batch_setbytes_use_lob#

기본값 true
값의 범위 [true | false ]
필수 여부 No
설정 범위 N/A
설명 BLOB 타입 칼럼을 대상으로 PreparedStatement.setBytes()를 executeBatch()로 실행 시
이진 타입과 BLOB 타입 중 어느 것으로 처리할지 설정한다. true는 BLOB 타입으로 처리한다.
BLOB 데이터가 이진 타입이 처리할 수 있는 최대 크기인 65,534바이트를 초과하면
java.lang.ClassCastException 에러가 발생하므로 이 경우 프로퍼티 값을 true로 설정한다.
false는 이진 타입으로 처리한다.


Statement와 ResultSet 다루기#

이 절에서는 JDBC로 Altibase 서버에 연결해서 SQL문을 실행하는 기본적인 방법을 코드 예제로 설명한다. 편의상 exception 처리는 생략한다.

예제#

import java.util.Properties;
import java.sql.*;

//...

String sURL      = "jdbc:Altibase://localhost:20300/mydb";
String sUser     = "SYS";
String sPassword = "MANAGER";

Connection sCon = null;

//Set properties for Connection    
Properties sProps = new Properties();
sProps.put( "user",     sUser);
sProps.put( "password", sPassword);

// Load class to register Driver into DriverManager   
Class.forName("Altibase.jdbc.driver.AltibaseDriver");

// Create a Connection Object
sCon = DriverManager.getConnection( sURL, sProps );

// Create a Statement Object
Statement sStmt = sCon.createStatement();

// Execute DDL Type Query
sStmt.execute("CREATE TABLE TEST ( C1 VARCHAR (10) )");

// Execute Inserting Query
sStmt.execute("INSERT INTO TEST VALUES ('ABCDE')");

// Execute Selecting Query
// Get Result Set from the Statement Object
ResultSet sRs = sStmt.executeQuery("SELECT * FROM TEST");

// Get ResultSetMetaData Object
ResultSetMetaData sRsMd = sRs.getMetaData();

// Retrieve ResultSet
while(sRs.next())
{
    for(int i=1; i<=sRsMd.getColumnCount(); i++)
    {
        // Get Actual Data and Printout
        System.out.println(sRs.getObject(i));
    }
}

// Eliminate ResultSet Resource
sRs.close();

// Execute Updating Query
sStmt.execute("UPDATE TEST SET C1 = 'abcde'");

// Execute Selecting Query
// Get Result Set from the Statement Object
sRs = sStmt.executeQuery("SELECT * FROM TEST");

// Get ResultSetMetaData Object
sRsMd = sRs.getMetaData();

// Retrieve ResultSet
while(sRs.next())
{
    for(int i=1; i<=sRsMd.getColumnCount(); i++)
    {
        // Get Actual Data and Printout
        System.out.println(sRs.getObject(i));
    }
}

// Eliminate ResultSet Resource
sRs.close();

// Execute Deleting Query
sStmt.execute("DELETE FROM TEST");

// Execute Selecting Query
// Get Result Set from the Statement Object
sRs = sStmt.executeQuery("SELECT * FROM TEST");

// Get ResultSetMetaData Object
sRsMd = sRs.getMetaData();

// Retrieve ResultSet
while(sRs.next())
{
    for(int i=1; i<=sRsMd.getColumnCount(); i++)
    {
        // Get Actual Data and Printout
        System.out.println(sRs.getObject(i));
    }
}

// Eliminate Resources
sRs.close();
sStmt.close();

JDBC Connection Failover#

여러 개의 Altibase 서버를 운영하는 환경에서 한 서버의 종료 또는 네트워크 장애 등으로 인해 Altibase JDBC 드라이버를 사용해서 구현한 응용프로그램의 서비스가 불가능해질 수 있다.

이런 장애 상황이 발생하면, 장애가 발생한 서버로 접속하던 클라이언트는 장애 상황을 감지하고, 자동으로 다른 서버로 접속해서 실행 중이던 명령(Statement)들을 처리할 수 있는데 이를 Fail-Over라고 한다.

JDBC 애플리케이션에서 Fail-Over 기능을 사용하는 방법은 Replication Manual 의 4장을 참고하기 바란다.