16.2.1 Driverクラス
- 〈この項の構成〉
(1) 概要
Driverクラスでは,次の機能が提供されます。
-
DB接続
-
指定したURLの妥当性チェック
-
DriverManager.getConnectionメソッドで指定する接続プロパティの情報取得
-
ドライババージョンの返却
Driverクラスで提供される各メソッドの詳細,使用方法については,JDBCの関連ドキュメントを参照してください。ここでは,DB接続をするときの手順,及びこのJDBCドライバ独自のURLの構文について説明します。
(2) DriverManagerを使用したDB接続
DB接続は,Java実行環境が提供するDriverManagerクラスを使用して,次の手順で実行します。
-
DriverクラスをJava仮想マシンに登録します。
-
接続情報を引数にして,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メソッドの引数の内容を次の表に示します。
引数 |
内容 |
指定可否 |
---|---|---|
String url |
URL。URLについては,「URLの構文」を参照してください。 |
○ |
String user |
認可識別子※1 |
○※2 |
String password |
パスワード |
△ |
Properties info |
表「Properties infoの設定内容」を参照してください。 |
− |
- (凡例)
-
○:必ず指定してください。
△:指定は任意です。
−:該当しません。
- 注※1
-
認可識別子にnull又は空文字を指定した場合,SQLExceptionを投入します。また,ドライバが文字コードを変換した結果,認可識別子に指定した文字列のサイズが31バイト以上となった場合,SQLExceptionを投入します。文字コードの変換については,「文字コード変換機能」を参照してください。
- 注※2
-
内部ドライバで記述する場合は省略できます。
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がコミットをした場合に,次に示すクラスをコミット実行後も有効とするかどうかを設定します。
指定値については,「setCommit_Behavior」を参照してください。
|
△ |
BLOCK_UPDATE |
?パラメタを使用したデータベースの更新で,複数のパラメタセットを一度に処理するかどうかを設定します。省略した場合,"FALSE"が仮定されます。
注意事項:
|
△ |
LONGVARBINARY_ACCESS |
LONGVARBINARY(列属性がBLOB又はBINARY)のデータベースのアクセス方法を指定します。省略した場合,"REAL"が仮定されます。
|
△ |
HiRDB_for_Java_SQL_IN_NUM |
実行するSQLの入力,又は入出力?パラメタの最大数を指定します。この指定は,SQLの前処理時に取得する,入力,又は入出力?パラメタ情報の数となります。 実際の入力,又は入出力?パラメタの数が,このプロパティの指定値よりも多い場合,SQLの前処理の後に入力,又は入出力?パラメタ情報を取得します。 指定値は,1〜30,000です(デフォルトは64)。これ以外の値,又は数字以外を指定した場合はエラーとなります。 注意事項:
|
△ |
HiRDB_for_Java_SQL_OUT_NUM |
実行するSQLの出力項目数の最大数を指定します。この指定は,SQLの前処理時に取得する出力項目情報の数となります。 実際の出力項目情報の数が,このプロパティの指定値よりも多い場合,SQLの前処理の後に出力項目情報を取得します。 指定値は,1〜30,000です(デフォルトは64)。これ以外の値,又は数字以外を指定した場合はエラーとなります。 注意事項:
|
△ |
HiRDB_for_Java_SQLWARNING_LEVEL |
SQL実行時に発生した警告情報の保持レベルを指定します。次の値を警告保持レベルとして指定できます。
なお,このメソッドでは,引数に指定した内容の大文字,小文字を区別しません。 上記の値については,「SQLWarningクラス」を参照してください。 |
△ |
HiRDB_for_Java_CLEAR_ENV |
DB接続時に,OSの環境変数として設定したHiRDBのクライアント環境定義を無効にするかどうかを指定します。
注意事項:
|
△ |
- (凡例)
-
○:必ず指定してください。
△:指定は任意です。
- 注※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版の場合
-
HiRDBクライアント環境変数登録ツールで登録した環境変数グループ名がHiRDB_ENV_GROUPの場合の指定例を次に示します。
String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=HiRDB_ENV_GROUP";
-
HiRDBの環境変数グループ名のパスが「C:\HiRDB_P\Client\HiRDB.ini」の場合の指定例を次に示します。
String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=C:\\HiRDB_P\\Client\\HiRDB.ini";
-
HiRDBの環境変数グループ名のパスが「C:\Program△Files\HITACHI\HiRDB\HiRDB.ini」の場合の指定例を次に示します(△は半角空白文字)。
String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=" + "\"C:\Program△Files\\HITACHI\\HiRDB\\HiRDB.ini\"";