Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


16.2.1 Driverクラス

〈この項の構成〉

(1) 概要

Driverクラスでは,次の機能が提供されます。

Driverクラスで提供される各メソッドの詳細,使用方法については,JDBCの関連ドキュメントを参照してください。ここでは,DB接続をするときの手順,及びこのJDBCドライバ独自のURLの構文について説明します。

(2) DriverManagerを使用したDB接続

DB接続は,Java実行環境が提供するDriverManagerクラスを使用して,次の手順で実行します。

  1. DriverクラスをJava仮想マシンに登録します。

  2. 接続情報を引数にして,DriverManager.getConnectionメソッドを呼び出します。

(a) DriverクラスのJava仮想マシンへの登録

Class.forNameメソッドの使用,又はシステムプロパティへの登録で,DriverクラスをJava仮想マシンに登録します。登録するときに指定する,JDBCドライバのパッケージ名称とDriverクラス名称を次に示します。

パッケージ名称:JP.co.Hitachi.soft.HiRDB.JDBC

Driverクラス名称:PrdbDriver

  • Class.forNameメソッドの使用

アプリケーション内で,次のようにClass.forNameメソッドを呼び出します。

  Class.forName("JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver");
  • システムプロパティへの登録

アプリケーション内で,次のようにSystem.setPropertyメソッドを呼び出します。

  System.setProperty("jdbc.drivers","JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver");

(b) 接続情報の設定とDB接続

DBと接続する場合,次のどれかの方法で実行してください。

  • DriverManager.getConnectionメソッドの使用

      Connection con = DriverManager.getConnection(String url, String user, String password) ;
      又は
      Connection con = DriverManager.getConnection(String url, Properties info) ;
  • 内部ドライバでの記述

内部ドライバで記述する場合,認可識別子などの接続情報は,HiRDB側でルーチンを呼び出した外部ドライバの情報が仮定されます。ただし,JDBCドライバ内部でトレースなどを取得する場合は,認可識別子として"INNER"が仮定されます。

<内部ドライバ限定の記述>
  Connection con = DriverManager.getConnection(String url) ;
  • Driverクラスのconnectメソッドの直接呼び出し

      Driver drv = new JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver();
      Connection con = drv.connect(String url, Properties info) ;

上記の各メソッドの引数(url,user,password,及びinfo)には,DB接続で必要な接続情報を設定します。

JDBCドライバは,正常にDB接続がされた場合,上記の各メソッドの呼び出しの結果として,Connectionオブジェクトを返却します。必要な接続情報を各引数に設定していない場合,又は接続情報の内容が不正な場合は,上記の各メソッドの呼び出しの結果として,SQLExceptionを投入します。

getConnectionメソッドの引数の内容を次の表に示します。

表16‒2 getConnectionメソッドの引数の内容

引数

内容

指定可否

String url

URL。URLについては,「URLの構文」を参照してください。

String user

認可識別子※1

※2

String password

パスワード

Properties info

表「Properties infoの設定内容」を参照してください。

(凡例)

○:必ず指定してください。

△:指定は任意です。

−:該当しません。

注※1

認可識別子にnull又は空文字を指定した場合,SQLExceptionを投入します。また,ドライバが文字コードを変換した結果,認可識別子に指定した文字列のサイズが31バイト以上となった場合,SQLExceptionを投入します。文字コードの変換については,「文字コード変換機能」を参照してください。

注※2

内部ドライバで記述する場合は省略できます。

Properties infoの設定内容を次の表に示します。

表16‒3 Properties infoの設定内容

キー

内容

指定可否

user

認可識別子※1です。

※2

password

パスワードです。

ENCODELANG

Javaプログラム内では,文字コードはUnicodeで扱うため,HiRDBとの文字データ処理時に,JDBCドライバがHiRDBの文字データとUnicodeとの相互文字コード変換をします。この文字コード変換処理で,JDBCドライバはJava仮想マシンが提供するエンコーダ及びデコーダを利用します。このJava仮想マシンが提供するエンコーダ及びデコーダに対して,JDBCドライバが指定する文字セット名称を指定します。指定値はJavaがサポートしている文字セット(MS932など)です。

このProperties infoで"OFF"を指定した場合,又は指定をしなかった場合(DataSource.setEncodeLangメソッドでの設定,及びURLのENCODELANGでの設定も含む)の動作については,「setEncodeLang」を参照してください。

COMMIT_BEHAVIOR

HiRDBがコミットをした場合に,次に示すクラスをコミット実行後も有効とするかどうかを設定します。

  • ResultSetクラス

  • Statementクラス,PreparedStatementクラス,及びCallableStatementクラス

指定値については,「setCommit_Behavior」を参照してください。

注意事項:

COMMIT_BEHAVIORについての注意事項」を参照してください。

BLOCK_UPDATE

?パラメタを使用したデータベースの更新で,複数のパラメタセットを一度に処理するかどうかを設定します。省略した場合,"FALSE"が仮定されます。

"TRUE":

一度に処理します。

"FALSE":

パラメタセットを一つずつ分割して処理します。

上記以外:

"FALSE"を指定したものとみなします。

注意事項:

  • "TRUE"を設定した場合,バッチ更新機能で,HiRDBの配列を使用した機能を使用できます。

  • 配列を使用した機能を利用できるSQLは,INSERT文,UPDATE文,及びDELETE文だけです。それ以外のSQLの場合,一括実行されないで逐次実行で処理されます。

  • 配列を使用した機能を利用できるSQLでも,配列を使用した機能の使用条件を満たさない場合は一括実行されないで,逐次実行で処理されます。

  • 配列を使用した機能を利用する場合,「バッチ更新」を参照してください。

  • 配列を使用した機能については,「配列を使用した機能」を参照してください。

  • この機能は,システムプロパティのHiRDB_for_Java_BLOCK_UPDATEでも指定できます。ただし,BLOCK_UPDATEを設定した場合は,システムプロパティのHiRDB_for_Java_BLOCK_UPDATEの設定は無効となります。

LONGVARBINARY_ACCESS

LONGVARBINARY(列属性がBLOB又はBINARY)のデータベースのアクセス方法を指定します。省略した場合,"REAL"が仮定されます。

"REAL":

HiRDBから実データでアクセスします。

"LOCATOR":

HiRDBの位置付け子を使用してアクセスします。

上記以外:

"REAL"を指定したものとみなします。

HiRDB_for_Java_SQL_IN_NUM

実行するSQLの入力,又は入出力?パラメタの最大数を指定します。この指定は,SQLの前処理時に取得する,入力,又は入出力?パラメタ情報の数となります。

実際の入力,又は入出力?パラメタの数が,このプロパティの指定値よりも多い場合,SQLの前処理の後に入力,又は入出力?パラメタ情報を取得します。

指定値は,1〜30,000です(デフォルトは64)。これ以外の値,又は数字以外を指定した場合はエラーとなります。

注意事項:

  • この項目は,システムプロパティのHiRDB_for_Java_SQL_IN_NUMでも指定できます。ただし,Properties infoにHiRDB_for_Java_SQL_IN_NUMを設定した場合は,システムプロパティの設定が無効となります。

  • 入力,又は入出力?パラメタのあるSQL文を実行しない場合は,1を指定することをお勧めします。

  • このプロパティの指定値は,バージョン07-02以降のHiRDBサーバと接続している場合に有効です。

HiRDB_for_Java_SQL_OUT_NUM

実行するSQLの出力項目数の最大数を指定します。この指定は,SQLの前処理時に取得する出力項目情報の数となります。

実際の出力項目情報の数が,このプロパティの指定値よりも多い場合,SQLの前処理の後に出力項目情報を取得します。

指定値は,1〜30,000です(デフォルトは64)。これ以外の値,又は数字以外を指定した場合はエラーとなります。

注意事項:

  • この機能は,システムプロパティのHiRDB_for_Java_SQL_OUT_NUMでも指定できます。ただし,Properties infoにHiRDB_for_Java_SQL_OUT_NUMを設定した場合は,システムプロパティの設定が無効となります。

  • 検索項目,又は出力若しくは入出力?パラメタのあるSQL文を実行しない場合は,1を指定することをお勧めします。

  • このプロパティの指定値は,バージョン07-02以降のHiRDBサーバと接続している場合に有効です。

HiRDB_for_Java_SQLWARNING_LEVEL

SQL実行時に発生した警告情報の保持レベルを指定します。次の値を警告保持レベルとして指定できます。

  • IGNORE

  • SQLWARN(デフォルト)

  • ALLWARN

なお,このメソッドでは,引数に指定した内容の大文字,小文字を区別しません。

上記の値については,「SQLWarningクラス」を参照してください。

HiRDB_for_Java_CLEAR_ENV

DB接続時に,OSの環境変数として設定したHiRDBのクライアント環境定義を無効にするかどうかを指定します。

TRUE:

OSの環境変数として登録したHiRDBのクライアント環境定義を,プロセス起動後の最初のDB接続時に無効にします。TRUEを指定することで,OSの環境変数以外の方法(環境変数グループなど)で設定したHiRDBのクライアント環境定義の値を適用できます。

FALSE(デフォルト):

OSの環境変数として登録したHiRDBのクライアント環境定義を無効にしません。

注意事項:

  • このメソッドでは,引数に指定した内容の大文字,小文字を区別しません。

  • 最初のDB接続の後,C言語などで実装したネイティブメソッド内で,OSの環境変数として設定したHiRDBのクライアント環境定義は,指定値をTRUEにしても無効にはなりません。

  • 複数回DBに接続する場合,最初にTRUEを指定してDB接続をした後は,次の接続でFALSEを指定しても,クライアント環境定義の値は無効になったまま元には戻りません。

(凡例)

○:必ず指定してください。

△:指定は任意です。

注※1

認可識別子にnull又は空文字を指定した場合,SQLExceptionを投入します。また,ドライバが文字コードを変換した結果,認可識別子に指定した文字列のサイズが31バイト以上となった場合,SQLExceptionを投入します。文字コードの変換については,「文字コード変換機能」を参照してください。

注※2

内部ドライバで記述する場合は省略できます。

COMMIT_BEHAVIORについての注意事項

注意事項を次に示します。

  • CLOSE又はPRESERVEを指定して,SELECT,INSERT,DELETE,UPDATE,PURGE TABLE,又はCALLでアクセスする資源(表やインデクスなど)に対して,ほかのユーザが定義系SQLを実行した場合,クライアント環境定義PDDDLDEAPRPEXEがNO,かつPDDDLDEAPRPがNOのとき,資源にアクセスしていたコネクションをDISCONNECTするまでの間,その定義系SQLは排他待ちの状態になります。

    クライアント環境定義PDDDLDEAPRPEXEがYES,又はPDDDLDEAPRPがYESのときは,前処理結果が無効となります。前処理結果が無効となったSQLを実行すると,SQLException例外(getErrorCodeメソッドで取得できる値は-1542)が発生します。

  • PRESERVEを指定した場合,JDBCドライバはHiRDBのホールダブルカーソルを使用します。

  • CLOSE又はPRESERVEを指定※1することで,コミット後※2もプリコンパイルしたSQL文が有効になるSQL文は,SELECT,INSERT,DELETE,UPDATE,PURGE TABLE,及びCALLだけです(Connection.prepareStatementメソッドの実行,及びConnection.prepareCallメソッドの実行によって,SQL文をプリコンパイルできます)。

    上記以外のSQL文では,COMMIT_BEHAVIORにCLOSE又はPRESERVEを指定しても,コミット時にプリコンパイルしたSQL文は無効になります。

    それらの無効になったSQL文を格納したPreparedStatementクラスのオブジェクト,及びCallableStatementクラスのオブジェクトでSQL文を実行するとエラーになります。エラーになる例を次に示します。

    [実行例]

    PreparedStatement pstmt1 = con.prepareStatement("lock table tb1");
    PreparedStatement pstmt2 = con.prepareStatement("lock table tb2");
    pstmt1.execute();        //エラーにならない。
    con.commit();
    pstmt2.execute();        //エラーになる。
    pstmt1.close();
    pstmt2.close();

    [説明]

    実行するSQL文がLOCK文であるため,COMMIT_BEHAVIORがCLOSEを指定していても,コミット後はPreparedStatementが無効となり,エラーが発生します。

    注※1

     次のどれかの指定の場合が該当します。

    ・getConnectionメソッドで指定するURLにCOMMIT_BEHAVIOR=CLOSEを指定する。

    ・getConnectionメソッドで指定するURLにCOMMIT_BEHAVIOR=PRESERVEを指定する。

    ・JdbhDataSource,JdbhConnectionPoolDataSource,及びJdbhXADataSourceクラスのsetCommit_BehaviorメソッドでCLOSEを指定する。

    ・JdbhDataSource,JdbhConnectionPoolDataSource,及びJdbhXADataSourceクラスのsetCommit_BehaviorメソッドでPRESERVEを指定する。

    注※2

     次の場合が該当します。

    ・commitメソッドによる明示的なコミット

    ・自動コミットによる暗黙的なコミット

    ・定義系SQL文の実行

    ・PURGE TABLE文の実行

    ・rollbackメソッドによる明示的なロールバック

    ・SQL実行エラーによる暗黙的なロールバック

(3) URLの構文

JDBCドライバで指定できるURLの構文について説明します。なお,URL内の各項目及び項目間には空白を入れないでください。接続付加情報項目とDBホスト名称項目の両方を指定する場合は,接続付加情報項目とDBホスト名称項目との間にコンマを指定してください。

(a) URLの構文

  jdbc:hitachi:PrdbDrive[://[DBID=接続付加情報]
                        [[{://|,}]DBHOST=DBホスト名称]
                        [[{://|,}]ENCODELANG=変換文字セット]
                        [[{://|,}]COMMIT_BEHAVIOR=カーソル動作モード]
                        [[{://|,}]CLEAR_ENV=環境変数無効化指定]]

(b) URLの各項目の説明

jdbc:hitachi:PrdbDrive:

プロトコル名称及びサブプロトコル名称です。必ず指定してください。

接続付加情報:

HiRDBのポート番号を指定します(クライアント環境定義のPDNAMEPORTに相当します)。又は,HiRDBの環境変数グループを指定します。

省略した場合,PDNAMEPORTのデフォルト値となります。

<接続付加情報にHiRDBの環境変数グループを指定する場合の注意事項>
  • HiRDBの環境変数グループ名を指定する場合は,グループ名の先頭に@を付けます。

  • 環境変数グループ名に半角空白文字,及び半角@文字を含む場合,半角引用符(")で囲んでください。環境変数グループ名を半角引用符で囲んだ場合,最後の半角引用符から次の設定項目,又は文字終端までの文字は無視されます。また,半角引用符,及び半角コンマを含む環境変数グループ名は指定できません。

  • 環境変数グループに登録された環境変数は,ユーザ環境変数やHiRDB.INIで登録した環境変数よりも優先されます。

  • 接続付加情報,及びDBホスト名称の指定と,接続先の優先順位を次に示します。

    1.接続付加情報に指定したHiRDBの環境変数グループ

    2.DBホスト名称,又は接続付加情報に指定したポート番号

    例えば,URL中のDBHOSTにDBホスト名称を指定しても,DBIDにHiRDBの環境変数グループ名を指定している場合は,HiRDBの環境変数グループの内容が優先されます。この場合,HiRDBの環境変数グループ内にPDHOSTの指定がないときは接続エラーとなります。

<接続付加情報にHiRDBのポート番号を指定する場合の注意事項>

接続先のポート番号が65535である場合は,クライアント環境定義のPDNAMEPORT又は環境変数グループを使用して接続先を指定してください。

DBホスト名称:

HiRDBのホスト名を指定します。クライアント環境定義のPDHOSTに相当します。

省略した場合,PDHOSTのデフォルト値となります。

変換文字セット:

文字型変換で使用する変換文字セットを指定します。

カーソル動作モード:

カーソルがCOMMITをわたって有効かどうかを指定します。

環境変数無効化指定:

DB接続時に,OSの環境変数として設定したHiRDBのクライアント環境定義を無効にするかどうかを指定します。指定値,及び注意事項については,表「Properties infoの設定内容」のHiRDB_for_Java_CLEAR_ENVを参照してください。

(c) 接続付加情報にHiRDBの環境変数グループ名を指定する場合の例

  • UNIX版の場合

HiRDBの環境変数グループ名のパスが「/HiRDB_P/Client/HiRDB.ini」の指定例を次に示します。

String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini";
  • Windows版の場合

  1. HiRDBクライアント環境変数登録ツールで登録した環境変数グループ名がHiRDB_ENV_GROUPの場合の指定例を次に示します。

    String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=HiRDB_ENV_GROUP";
  2. HiRDBの環境変数グループ名のパスが「C:\HiRDB_P\Client\HiRDB.ini」の場合の指定例を次に示します。

    String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=C:\\HiRDB_P\\Client\\HiRDB.ini";
  3. HiRDBの環境変数グループ名のパスが「C:\Program△Files\HITACHI\HiRDB\HiRDB.ini」の場合の指定例を次に示します(△は半角空白文字)。

    String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=" +
                 "\"C:\Program△Files\\HITACHI\\HiRDB\\HiRDB.ini\"";