Hitachi

Hitachi Advanced Data Binder AP開発ガイド


8.3.37 setHADBSQLMaxRthdNum(int rthdNum)

〈この項の構成〉

(1) 機能

このConnectionオブジェクトに対して最大SQL処理リアルスレッド数を設定します。

このメソッドで設定する内容は,クライアント定義のadb_sql_exe_max_rthd_numオペランドに対応しています。

重要

このメソッドを指定したConnectionオブジェクトから生成されたStatementオブジェクトまたはPreparedStatementオブジェクトは,Connectionオブジェクトがクローズされるまでは,このメソッドで指定した最大SQL処理リアルスレッド数が適用されます。

(2) 形式

public void setHADBSQLMaxRthdNum(int rthdNum) throws SQLException

(3) 引数

int rthdNum

設定する最大SQL処理リアルスレッド数を指定します。

(4) 戻り値

なし。

(5) 発生する例外

次に示す場合にSQLExceptionが投入されます。

(6) 留意事項

(7) 使用例

setHADBSQLMaxRthdNumおよびgetHADBSQLMaxRthdNumメソッドを使用して,実行するSQL文ごとに最大SQL処理リアルスレッド数を変更する例を次に示します。

(例1)
   :
   :
Connection cnct = ds.getConnection();
AdbConnection con = cnct.unwrap(com.hitachi.hadb.jdbc.AdbConnection.class);

// 最大SQL処理リアルスレッド数のデフォルト値を退避しておく
int default_sql_exe_rthd_num = con.getHADBSQLMaxRthdNum();

// 最大SQL処理リアルスレッド数を0に変更する
con.setHADBSQLMaxRthdNum(0);

// PreparedStatementオブジェクトを生成する
// このPreparedStatementオブジェクトで実行するすべてのSQL文は,
// 最大SQL処理リアルスレッド数が0で動作する
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM MASTER.SQL_USERS WHERE USER_NAME=?");

// 最大SQL処理リアルスレッド数をデフォルト値に戻す
con.setHADBSQLMaxRthdNum(default_sql_exe_rthd_num);
// この操作は上記のpstmtに影響を与えない

pstmt.setString(1, "HOGE");
ResultSet rs = pstmt.executeQuery(); // 最大SQL処理リアルスレッド数が0でSQL文を実行する
while (rs.next()) {
   :
   :
}
rs.close();
pstmt.close();
   :
   :
(例2)

ステートメントごとに異なる最大SQL処理リアルスレッド数で,SQL文を実行する例を次に示します。

   :
   :
Connection cnct = ds.getConnection();
AdbConnection con = cnct.unwrap(com.hitachi.hadb.jdbc.AdbConnection.class);

// 最大SQL処理リアルスレッド数のデフォルト値を退避しておく
int default_sql_exe_rthd_num = con.getHADBSQLMaxRthdNum();

// 最大SQL処理リアルスレッド数を0に変更する
con.setHADBSQLMaxRthdNum(0);

// PreparedStatementオブジェクトを生成する
// pstmt1で実行するすべてのSQL文は,最大SQL処理リアルスレッド数が0で動作する
PreparedStatement pstmt1 = con.prepareStatement("SELECT * FROM MASTER.SQL_USERS WHERE USER_NAME=?");

// 最大SQL処理リアルスレッド数を4に変更する
con.setHADBSQLMaxRthdNum(4); // この操作は上記の pstmt1 に影響を与えない

// PreparedStatementオブジェクトを生成する
// pstmt2で実行するすべてのSQL文は,最大SQL処理リアルスレッド数が4で動作する
PreparedStatement pstmt2 = con.prepareStatement("SELECT * FROM MASTER.SQL_TABLE_PRIVILEGES WHERE GRANTOR=?");

// 最大SQL処理リアルスレッド数をデフォルト値に戻す
con.setHADBSQLMaxRthdNum(default_sql_exe_rthd_num);
// この操作は上記のpstmt1およびpstmt2に影響を与えない

pstmt1.setString(1, "HOGE");
ResultSet rs1 = pstmt1.executeQuery(); // 最大SQL処理リアルスレッド数が0でSQL文を実行する
while (rs1.next()) {
   :
   :
}
rs1.close();
pstmt1.close();

pstmt2.setString(1, "FOO");
ResultSet rs2 = pstmt2.executeQuery(); // 最大SQL処理リアルスレッド数が4でSQL文を実行する
while (rs2.next()) {
   :
   :
}
rs2.close();
pstmt2.close();
   :
   :
メモ
  • 上記の例では,例外処理などのエラー処理は省いています。

  • setHADBSQLHashTblSizeおよびgetHADBSQLHashTblSizeメソッドを使用して,実行するSQL文ごとにハッシュテーブル領域サイズを変更する場合も,上記の例を参考にしてください。

  • setHADBSQLHashFltSizeおよびgetHADBSQLHashFltSizeメソッドを使用して,実行するSQL文ごとにハッシュフィルタ領域サイズを変更する場合も,上記の例を参考にしてください。