18.3.7 HiRDBサーバとの接続,切り離しの記述
SQLJにはCONNECT文及びDISCONNECT文がないため,HiRDBサーバとの接続,切り離しはJavaの命令で記述します。
(1) HiRDBサーバとの接続
HiRDBサーバと接続する場合,接続コンテキストを使用して次のように記述します。
(a) 接続コンテキストクラスの定義
接続コンテキストのクラスを定義します。クラス名はJavaの識別子です。定義したクラスは,sqlj.runtime.ConnectionContextを継承しています。
#sql 修飾子 context クラス名 ;
(b) 接続コンテキストの宣言
宣言したクラスを使用して,接続コンテキストを宣言します(Javaの変数宣言として宣言します)。接続コンテキストはJavaの識別子です。
修飾子 クラス名 接続コンテキスト ;
(c) HiRDBサーバへの接続
new演算子で接続コンテキストのオブジェクトを生成します。このとき,HiRDBサーバへ接続されます。接続パラメタには,接続先のHiRDBサーバ,ポート番号,認可識別子,及びパスワードを,JDBCと同じ形式で記述します。
接続コンテキスト = new クラス名(接続パラメタ) ;
(d) ネイティブインタフェース版を使用した場合のHiRDBサーバへの接続
ネイティブインタフェース版を使用した場合,次の3種類の接続方法があります。
-
Javaの命令として記述
-
CONNECT文を使用
-
JDBCの接続オブジェクト(Connection)を使用
各接続方法の説明を次に示します。
- 1.Javaの命令として記述
-
new演算子で接続コンテキストのオブジェクトを生成します。ただし,JDBCを使用しないため,接続パラメタには認可識別子,パスワード,サーバ名,及びポート番号を指定します。
接続コンテキスト = new クラス名(接続パラメタ);
接続パラメタに何も指定しない場合,クライアント環境定義を参照します。
接続コンテキスト = new クラス名();
接続コンテキストの作成例を次に示します。
#sql context Ctx; String Userid=new String(“user1”); String Passwd=new String(“puser1”); String Host=new String(“HiRDB_SV”); short port=22000; Ctx con = new Ctx(:Userid,:Passwd,:Host,:port);
- 2.CONNECT文を使用
-
接続パラメタには,認可識別子,及びパスワードを指定します。
ポート番号,及びサーバ名は,クライアント環境定義を参照します。
#sql [接続コンテキスト]{CONNECT USER :埋込み変数 USING :埋込み変数}; 又は #sql [接続コンテキスト]{CONNECT :埋込み変数 IDENTIFIED BY :埋込み変数};
接続パラメタを指定しない場合,クライアント環境定義を参照します。
#sql [接続コンテキスト]{CONNECT};
CONNECT文の例を次に示します。
#sql context Ctx; String Userid=new String(“user1”); String Passwd=new String(“puser1”); Ctx con; #sql [con] {CONNECT USER :Userid USING :Passwd };
- 3.JDBCの接続オブジェクト(Connection)を使用
-
new演算子で接続コンテキストのオブジェクトを生成します。接続パラメタには,JDBCの接続オブジェクト(java.sql.Connection)を指定します。
接続コンテキスト = new クラス名(接続オブジェクト);
接続コンテキストの作成例を次に示します。
#sql context Ctx; java sql.Connection con = java.sql.DriverManager.getConnection("jdbc:hitachi:PrdbDrive://DBID=22200, DBHOST=HiRDB_SV",”user1”,”user1”); Ctx ctx = new Ctx(con);
(2) HiRDBサーバとの切り離し
HiRDBサーバとの切り離しをする場合は,接続コンテキストのcloseメソッドを呼び出します。なお,再接続用のメソッドはありません。再接続する場合は,オブジェクトを新たに作成します。
接続コンテキスト.close() ;
接続コンテキストのcloseメソッドを呼び出す例を次に示します。
#sql context DeptContext; : { DeptContext deptCtx = new DeptContext(deptURL,true); #sql [deptCtx] { DELETE FROM TAB }; deptCtx.close(); }
ネイティブインタフェース版を使用した場合,接続テキストのcloseメソッドを呼び出す方法以外に,DISCONNECT文を使用することもできます。
#sql[接続コンテキスト]{DISCONNECT};
DISCONNECT文の例を次に示します。
#sql context Ctx; Ctx con; #sql[con]{CONNECT}; #sql[con]{DISCONNECT};
(3) デフォルト接続
(a) スタンダードインタフェース版の場合
スタンダードインタフェース版の場合,SQL文に接続コンテキストを明示しないときは,デフォルトの接続コンテキストが指定されたものとみなされます。
デフォルト接続コンテキストを使用する場合は,UAPがあらかじめ接続コンテキストを作成し,その接続コンテキストをデフォルト接続コンテキストとして設定しておく必要があります。一度設定したデフォルト接続コンテキストは,デフォルト接続コンテキストのclose()メソッドを発行するか,又は新たな接続コンテキストをデフォルトの接続コンテキストとして再設定しないかぎり有効です。
デフォルト接続コンテキストは,デフォルト接続コンテキストクラス(JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext)内の変数に保持されています。
デフォルト接続コンテキストは,次のような異なる引数を持つ,複数のコンストラクタを持っています。
-
JDBCのconnectionオブジェクトを引数に持つコンストラクタ
-
接続先のURL,認可識別子,パスワード,及びオートコミットの指定を引数に持つコンストラクタ
-
接続先のURL,Propertiesオブジェクト,及びオートコミットの指定を引数に持つコンストラクタ
-
接続コンテキストを引数に持つコンストラクタ
接続先のURL,認可識別子,及びパスワードの指定は,HiRDBのJDBCドライバと同じ形式で記述します。
SQLJでは,接続コンテキスト作成時に接続URLを含むコンストラクタを使用する場合,オートコミットの指定が必要であり,有効にするときはTRUE,無効にするときはFALSEと指定します。
JDBCの接続コンテキストから生成する場合は,オートコミットの設定はJDBCの接続コンテキストの設定を引き継ぎます。
-
デフォルト接続コンテキストの作成と設定
デフォルト接続コンテキストの作成と設定の例を次に示します。
import JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext; : PrdbContext pctx = new PrdbContext(url,user,passwd,autoCommit); PrdbContext.setDefaultContext(pctx);
-
デフォルト接続コンテキストの解放と再設定
デフォルト接続コンテキストの解放と再設定の例を次に示します。
import JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext; : PrdbContext pctx = new PrdbContext(url,user,passwd,autoCommit); PrdbContext.setDefaultContext(pctx); : pctx.close(); PrdbContext new_pctx = new PrdbContext(url.use,passwd,autoCommit); PrdbContext.setDefaultContext(new_pctx);
-
デフォルト接続コンテキストの取得
次のメソッドを呼び出すと,デフォルトの接続コンテキストを取得できます。
JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext.getDefaultContext();
デフォルトコンテキストを明示的に指定した場合の例を次に示します。
void print_address(String name) throws SQLException; { String telno; sqlj.runtime.ConnectionContext ctx; ctx = JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext.getDefaultContext(); #sql [ctx] { SELECT TELNO INTO :telno FROM PERSON WHERE :name = NAME } ; }
(b) ネイティブインタフェース版の場合
ネイティブインタフェース版の場合,デフォルト接続コンテキストクラスはJP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext内の変数に保持されています。
デフォルト接続コンテキストクラスは,次の複数のコンストラクタを持ちます。
-
JDBCのconnectionオブジェクトを引数に持つコンストラクタ
-
接続先の認可識別子,パスワード,サーバ名,及びポート番号を引数に持つコンストラクタ
-
接続先の認可識別子,及びパスワード指定を引数に持つコンストラクタ
-
接続コンテキストを引数に持つコンストラクタ
-
引数なしのコンストラクタ
-
デフォルト接続コンテキストの作成と設定
デフォルト接続コンテキストの作成と設定の例を次に示します。
import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext; : PrdbContext pctx = new PrdbContext(); PrdbContext.setDefaultContext(pctx);
-
デフォルト接続コンテキストの解放と再設定
デフォルト接続コンテキストの解放と再設定の例を次に示します。
import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext; : PrdbContext pctx = new PrdbContext(user,passwd,host,port); PrdbContext.setDefaultContext(pctx); : pctx.close(); PrdbContext new_pctx = new PrdbContext(user,passwd,host,port); PrdbContext.setDefaultContext(new_pctx);
-
デフォルト接続コンテキストの取得
次のメソッドを呼び出すと,デフォルトの接続コンテキストが得られます。
JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext.getDefaultContext();
デフォルトコンテキストを明示的に指定した場合のコーディング例を次に示します。
void print_address(String name) throws SQLException; { String telno; JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.ConnectionContext ctx; ctx = JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext.getDefaultContext(); #sql [ctx] { SELECT TELNO INTO :telno FROM PERSON WHERE :name = NAME } ; }