17.4.3 Statementインタフェース
- 〈この項の構成〉
(1) 概要
Statementインタフェースでは,主に次の機能が提供されます。
-
SQLの実行
-
検索結果としての結果セット(ResultSetオブジェクト)の生成
-
更新結果としての更新行数の返却
-
最大検索行数の設定
-
検索制限時間の設定
(2) メソッド
Statementインタフェースのメソッド一覧を次の表に示します。なお,表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると,SQLExceptionを投入します。
メソッド |
提供ドライバ |
機能 |
|
---|---|---|---|
JDBC2.0 |
JDBC4.0 |
||
○ |
○ |
このStatementオブジェクトのバッチに,指定されたSQLを追加します。 |
|
○ |
○ |
該当するオブジェクト,及び該当するオブジェクトと同一接続のオブジェクトが実行中のSQLを取り消します。 |
|
○ |
○ |
このStatementオブジェクトのバッチに登録されたSQLを,すべてクリアします。 |
|
○ |
○ |
このStatementオブジェクトに関して報告された,すべての警告をクリアします。 |
|
○ |
○ |
Statementオブジェクト,及びこのStatementオブジェクトから生成したResultSetオブジェクトのクローズを行います。 |
|
○ |
○ |
指定されたSQL文を実行します。 |
|
○ |
○ |
バッチに登録されたSQLを実行し,更新行数の配列を返します。 |
|
○ |
○ |
指定された検索系SQLを実行し,その結果のResultSetオブジェクトを返します。 |
|
○ |
○ |
指定された検索系以外のSQLを実行し,更新行数を返します。 |
|
○ |
○ |
このStatementオブジェクトを生成したConnectionオブジェクトを返します。 |
|
○ |
○ |
このStatementオブジェクトから生成される結果集合の,デフォルトのフェッチ方向を取得します。 |
|
○ |
○ |
このStatementオブジェクトから生成されるResultSetオブジェクトの,デフォルトのフェッチサイズを取得します。 |
|
○ |
○ |
このStatementオブジェクトによって生成される,ResultSetオブジェクトの文字及びバイナリの各列値に対し,返される最大バイト数を取得します。 |
|
○ |
○ |
このStatementオブジェクトによって生成されるResultSetオブジェクトが,含むことのできる最大格納行数を取得します。 |
|
○ |
○ |
次の結果集合に移動します。 |
|
○ |
○ |
SQL実行がタイムアウトになる秒数を返します。 |
|
○ |
○ |
ResultSetオブジェクトとして,現在の結果を取得します。 |
|
○ |
○ |
このStatementオブジェクトから生成されるResultSetオブジェクトの並行処理モードを取得します。 |
|
○ |
○ |
このStatementオブジェクトから生成されるResultSetオブジェクトの保持機能を取得します。 |
|
○ |
○ |
このStatementオブジェクトから生成されるResultSetオブジェクトの,結果集合の型を取得します。 |
|
○ |
○ |
更新行数を返します。 |
|
○ |
○ |
このStatementオブジェクトに関する呼び出しによって報告される,最初の警告を取得します。 |
|
○ |
○ |
このドライバでは,位置決めされた更新及び削除をサポートしていないため,このメソッドは指定値を無視します。 |
|
○ |
○ |
このStatementオブジェクトによるエスケープ構文の解析を,有効又は無効にします。 |
|
○ |
○ |
このStatementオブジェクトから生成される結果集合の,デフォルトのフェッチ方向を指定します。 |
|
○ |
○ |
このStatementオブジェクトから生成されるResultSetオブジェクトの,デフォルトのフェッチサイズを設定します。 |
|
○ |
○ |
このStatementオブジェクトによって生成されるResultSetオブジェクトの,文字及びバイナリの各列に対する最大バイト数を,指定されたバイト数に設定します。 |
|
○ |
○ |
このStatementオブジェクトによって生成されるResultSetオブジェクトが,含むことのできる最大格納行数を設定します。 |
|
○ |
○ |
SQL実行がタイムアウトになる秒数を設定します。 |
|
× |
○ |
Statementオブジェクトがクローズされているかどうかの情報を取得します。 |
|
× |
○ |
Statementオブジェクトがプールできるかどうかを示す値を取得します。 |
(a) addBatch(String sql)
- 【機能】
-
このStatementオブジェクトのバッチに,指定されたSQLを追加します。
最大2,147,483,647個実行するSQL文を登録できます。
- 【形式】
public synchronized void addBatch(String sql) throws SQLException
- 【引数】
-
- String sql:
-
実行するSQL文
- 【戻り値】
-
なし。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
上限値2,147,483,647個を超えるSQL文を登録しようとした場合
-
SQLにnull又は0長文字列を指定している場合
-
(b) cancel()
- 【機能】
-
該当するオブジェクト,及び該当するオブジェクトと同一接続のオブジェクトが実行中のSQLを取り消します。
- 【形式】
public void cancel() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
なし。
- 【機能詳細】
-
cancelメソッドを使用して,実行中のSQL※に非同期キャンセルを実行できます。
このメソッドは,該当するStatementオブジェクトがSQL実行中でなくても,同一接続オブジェクトに対して,ほかのオブジェクトがSQLを実行している場合は,非同期キャンセルを行います。
キャンセルがHiRDBサーバで実行された場合,次の方法による設定値に関係なく,キャンセル前に作成したResultSetオブジェクト,PreparedStatementオブジェクト,及びCallableStatementオブジェクトが無効となります。
-
DriverManager.getConnectionのProperties引数中のプロパティHiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR
-
URL中のSTATEMENT_COMMIT_BEHAVIOR
-
DataSource系インタフェースのsetStatementCommitBehavior
-
DriverManager.getConnectionのProperties引数中のプロパティHIRDB_CURSOR
-
URL中のHIRDB_CURSOR
-
DataSource系インタフェースのsetHiRDBCursorMode
-
ConnectionインタフェースのsetHoldabilityメソッド
-
ConnectionインタフェースのcreateStatement,parepareStatementメソッドの引数resultSetHoldability
-
SQL文(until disconnectの指定)
該当するStatementオブジェクトがSQL実行中ではなく,かつ同一接続オブジェクトに対してほかのオブジェクトがSQLを実行していない場合,このメソッドはHiRDBに対してキャンセルを実行しません。
XADataSourceを使用した接続の場合,非同期キャンセルの要求は無効になります。
- 注※
-
「HiRDBサーバ側に制御があり(このJDBCドライバは応答待ち),サーバで処理中のSQL」のことを指します。
-
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(c) clearBatch()
- 【機能】
-
このStatementオブジェクトのバッチに登録されたSQLを,すべてクリアします。
- 【形式】
public synchronized void clearBatch() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
なし。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(d) clearWarnings()
- 【機能】
-
このStatementオブジェクトに関して報告された,すべての警告をクリアします。
- 【形式】
public synchronized void clearWarnings() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
なし。
- 【発生する例外】
-
なし。
(e) close()
- 【機能】
-
Statementオブジェクト,及びこのStatementオブジェクトから生成したResultSetオブジェクトのクローズを行います。
- 【形式】
public void close() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
なし。
- 【機能詳細】
-
Statementオブジェクト,及びこのStatementオブジェクトから生成したResultSetオブジェクトのクローズを行います。
プーリング接続時に,Statementのcloseメソッドの発行でエラーが発生した場合,SQLExceptionを投入しません。
また,プーリング環境下及びXA環境下で,Statementのcloseメソッドでデータベースとの物理的な切断でエラーが発生し,コネクションプーリングが使用できなくなった場合,ConnectionEventListener.connectionErrorOccurred()は発生しません。
- 【発生する例外】
-
データベースアクセスエラーが発生した場合,SQLExceptionを投入します。
(f) execute(String sql)
- 【機能】
-
指定されたSQL文を実行します。ResultSetオブジェクトや更新行数を,Statement.getResultSet,Statement.getUpdateCountで取得できます。
- 【形式】
public synchronized boolean execute(String sql) throws SQLException
- 【引数】
-
- String sql:
-
実行するSQL文
- 【戻り値】
-
実行したSQLが検索系SQLの場合はtrue,そうでない場合はfalseを返します。
- 【機能詳細】
-
指定されたSQL文を実行します。ResultSetオブジェクトや更新行数を,Statement.getResultSet,Statement.getUpdateCountで取得できます。
このメソッド実行後のStatement.getResultSet,及びStatement.getUpdateCountの戻り値を次の表に示します。
表17‒20 実行したSQLとStatement.getResultSet及びStatement.getUpdateCountの戻り値の関係 実行したSQLの種類
Statement.getResultSetの戻り値
Statement.getUpdateCountの戻り値
システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHK指定
システムプロパティHiRDB_for_Java_UPDATECOUNT_BEHAVIOR指定
TRUE以外
TRUE
TRUE
FALSE
検索系SQL
実行結果のResultSetオブジェクト
-1
検索系以外のSQL
null
0列のResultSetオブジェクト
1以上の値又は-1(更新行なし)
0以上の値
SQLの実行がエラーとなった場合
null
null
-1
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
引数sqlにnull又は0長文字列を指定した場合
-
データベースアクセスエラーが発生した場合
-
HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合(JDBC4.0のときだけ)
-
(g) executeBatch()
- 【機能】
-
バッチに登録されたSQLを実行し,更新行数の配列を返します。
バッチに登録されたすべてのSQLを実行後,又は途中でエラーが起きた場合,Statement.clearBatch()を呼び,バッチ登録情報をクリアします。
- 【形式】
public synchronized int[] executeBatch() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
実行したSQLごとの更新行数を,配列にして返します。配列は,バッチに登録された順序になります。バッチに一つも登録されていない場合,又はバッチの一つ目がエラーだった場合,要素数0の配列を返します。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
次の場合,例外BatchUpdateException(SQLExceptionのサブクラス)を投入します。
-
検索系SQLがバッチで実行された場合
-
データベースアクセスエラーが発生した場合
-
HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合(JDBC4.0のときだけ)
-
(h) executeQuery(String sql)
- 【機能】
-
指定された検索系SQLを実行し,その結果のResultSetオブジェクトを返します。
- 【形式】
public synchronized ResultSet executeQuery(String sql) throws SQLException
- 【引数】
-
- String sql:
-
実行するSQL文
- 【戻り値】
-
実行結果のResultSetオブジェクト
- 【機能詳細】
-
-
システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合
指定された検索系SQLを実行し,その結果のResultSetオブジェクトを返却します。検索結果のないSQL文(INSERT文など)の場合は,SQLExceptionを投入します。
-
システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合
指定されたSQLを実行し,その結果のResultSetオブジェクトを返却します。
検索結果のないSQL文(INSERT文など)の場合,0列のResultSetオブジェクトを返却します。また,Statement.getUpdateCountメソッドを使用して,更新行数を取得できます。executeQueryメソッドの戻り値と,メソッド実行後に実行するStatement.getUpdateCountメソッドの戻り値を次の表に示します。
表17‒21 executeQueryメソッドの戻り値と,メソッド実行後に実行するStatement.getUpdateCountメソッドの戻り値 実行したSQLの種類
executeQueryメソッドの戻り値
Statement.getUpdateCountメソッドの戻り値
HiRDB_for_Java_UPDATECOUNT_BEHAVIOR指定
TRUE
FALSE
検索系SQL
実行結果のResultSetオブジェクト
-1
検索系以外のSQL
INSERT,UPDATE,DELETE
0列のResultSetオブジェクト
1以上の更新行数又は-1(更新行数なし)
0以上の更新行数
その他
0列のResultSetオブジェクト
-1
0
SQLの実行がエラーとなった場合
−
-1
-
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
検索系以外のSQLを指定した場合(システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く)
-
引数sqlにnull又は0長文字列を指定した場合
-
データベースアクセスエラーが発生した場合
-
HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合(JDBC4.0のときだけ)
-
(i) executeUpdate(String sql)
- 【機能】
-
指定された検索系以外のSQLを実行し,更新行数を返します。
- 【形式】
public synchronized int executeUpdate(String sql) throws SQLException
- 【引数】
-
- String sql:
-
実行するSQL文
- 【戻り値】
-
次の表に示します。
表17‒22 executeUpdateメソッドの戻り値 実行したSQLの種類
システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHK指定
TRUE以外
TRUE
検索系SQL
−
-1
検索系以外のSQL
INSERT,UPDATE,DELETE
更新行数
更新行数
その他
0
0
- 【機能詳細】
-
-
システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合
指定された検索系以外のSQLを実行し,更新行数を返却します。
検索結果を返却するSQL文(SELECT文)の場合は,SQLExceptionを投入します。
-
システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合
指定されたSQLを実行します。
戻り値が-1の場合,Statement.getResultSetメソッドを使用してResultSetオブジェクトを取得できます。executeUpdateメソッド実行後に実行するStatement.getResultSetメソッドの戻り値を次の表に示します。
表17‒23 executeUpdateメソッド実行後に実行するStatement.getResultSetメソッドの戻り値 実行したSQLの種類
Statement.getResultSetメソッドの戻り値
検索系SQL
実行結果のResultSetオブジェクト
検索系以外のSQL
INSERT,UPDATE,DELETE
0列のResultSetオブジェクト
その他
0列のResultSetオブジェクト
SQLの実行がエラーとなった場合
null
-
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
検索系SQLを指定した場合(システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く)
-
引数sqlにnull又は0長文字列を指定した場合
-
データベースアクセスエラーが発生した場合
-
HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合(JDBC4.0のときだけ)
-
(j) getConnection()
- 【機能】
-
このStatementオブジェクトを生成したConnectionオブジェクトを返します。
- 【形式】
public synchronized Connection getConnection() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
Connectionオブジェクト
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(k) getFetchDirection()
- 【機能】
-
このStatementオブジェクトから生成される結果集合の,デフォルトのフェッチ方向を取得します。
HiRDBでは,フェッチ方向は順方向しかサポートしないため,このメソッドの戻り値は,常にResultSet.FETCH_FORWARDとなります。
- 【形式】
public synchronized int getFetchDirection() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
常にResultSet.FETCH_FORWARDを返します。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(l) getFetchSize()
- 【機能】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの,デフォルトのフェッチサイズを取得します。
- 【形式】
public synchronized int getFetchSize() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの,デフォルトのフェッチサイズ
- 【機能詳細】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの,デフォルトのフェッチサイズを取得します。
setFetchSizeで0が指定されている場合,実際のフェッチサイズはクライアント環境定義に依存しますが,このメソッドは0を返します。フェッチサイズと戻り値の関係を次の表に示します。
表17‒24 フェッチサイズと戻り値の関係 setFetchSizeの設定値(m)
戻り値
0
0
1≦m≦4096
m
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(m) getMaxFieldSize()
- 【機能】
-
このStatementオブジェクトによって生成される,ResultSetオブジェクトの文字及びバイナリの各列値に対し,返される最大バイト数を取得します。この最大バイト数は,[M|N][VAR]CHAR,BINARY,及びBLOBの各列にだけ適用されます。最大バイト数を超えた分は切り捨てます。
setMaxFieldSizeで設定した値を返します。
- 【形式】
public synchronized int getMaxFieldSize() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
[M|N][VAR]CHAR,BINARY,及びBLOB列に対する現在の最大バイト数。0は無制限を意味します。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(n) getMaxRows()
- 【機能】
-
このStatementオブジェクトによって生成されるResultSetオブジェクトが,含むことのできる最大格納行数を取得します。最大格納行数を超えた行は,通知なしに除外されます。
setMaxRowsで設定した値を返します。
- 【形式】
public synchronized int getMaxRows() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
このStatementオブジェクトによって生成される,ResultSetオブジェクトの最大格納行数(0は無制限を意味します)
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(o) getMoreResults()
- 【機能】
-
次の結果集合に移動します。
- 【形式】
public synchronized boolean getMoreResults() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
- true:
-
次の結果集合が存在します。
- false:
-
次の結果集合が存在しません。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
データベースアクセスエラーが発生した場合
-
(p) getQueryTimeout()
- 【機能】
-
SQL実行がタイムアウトになる秒数を返します。
setQueryTimeoutで設定した値を返します。
setQueryTimeoutを実行してない場合は,0を返します。
- 【形式】
public synchronized int getQueryTimeout() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
タイムアウトになる秒数
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(q) getResultSet()
- 【機能】
-
ResultSetオブジェクトとして,現在の結果を取得します。
- 【形式】
public synchronized ResultSet getResultSet() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
Statementオブジェクトが保持しているResultSetオブジェクト(結果がない場合はnullを返します)
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(r) getResultSetConcurrency()
- 【機能】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの並行処理モードを取得します。
更新カーソルは未サポートのため,常にResultSet.CONCUR_READ_ONLYを返します。
- 【形式】
public synchronized int getResultSetConcurrency() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
常にResultSet.CONCUR_READ_ONLYを返します。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(s) getResultSetHoldability()
- 【機能】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの保持機能を取得します。
保持機能はStatementオブジェクト生成時に決められ,以後変更はできません。
- 【形式】
public synchronized int getResultSetHoldability() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
- ResultSet.HOLD_CURSORS_OVER_COMMIT:
-
コミット・ロールバック後も,ResltSetオブジェクトを操作できます。
- ResultSet.CLOSE_CURSORS_AT_COMMIT:
-
コミット・ロールバック後のResultSetオブジェクトの操作で,close以外の操作はSQLExceptionが起きます。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(t) getResultSetType()
- 【機能】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの,結果集合の型を取得します。
更新カーソルは未サポートのため,ResultSet.TYPE_FORWARD_ONLY又はResultSet.TYPE_SCROLL_INSENSITIVEを返します。
- 【形式】
public synchronized int getResultSetType() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
- ResultSet.TYPE_FORWARD_ONLY:
-
カーソルが順方向だけ移動できます。
- ResultSet.TYPE_SCROLL_INSENSITIVE:
-
カーソルがスクロールできますが,値の変更は反映されません。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(u) getUpdateCount()
- 【機能】
-
更新行数を返します。
- 【形式】
public synchronized int getUpdateCount() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
次の表に示します。
表17‒25 getUpdateCountメソッドの戻り値 Statementオブジェクトのメソッド実行状態
getUpdateCountの戻り値
HiRDB_for_Java_UPDATECOUNT_BEHAVIOR指定
TRUE
FALSE
executeXXXメソッドを実行していない
-1
executeXXXメソッドを実行している
最後に実行したexecuteXXXメソッドの後,getMoreResultsメソッドを実行した
-1
最後に実行したexecuteXXXメソッドでエラーが発生した
-1
最後にexecuteBatchメソッドを実行した
-1
最後にexecuteBatchメソッド以外のexecuteXXXメソッドを実行した
最後に実行したSQLが検索系SQL
-1
最後に実行したSQLが検索系以外のSQL
INSERT,UPDATE,DELETE
更新行あり
更新行数
更新行なし
-1
0
ASSIGN LIST
作成行あり
作成行数
作成行なし
-1
0
CALL
結果集合あり
-1
結果集合なし
-1
0
その他
-1
0
- 【機能詳細】
-
更新行数を返します。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(v) getWarnings()
- 【機能】
-
このStatementオブジェクトに関する呼び出しによって報告される,最初の警告を取得します。二つ以上の警告がある場合,後続の警告は,最初の警告にチェーンされ,直前に取得された警告のSQLWarning.getNextWarningメソッドを呼び出すことによって取得されます。
- 【形式】
public synchronized SQLWarning getWarnings() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
最初のSQLWarningオブジェクト(SQLWarningオブジェクトがない場合は,nullを返します)
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(w) setCursorName(String name)
- 【機能】
-
このドライバでは,位置決めされた更新及び削除をサポートしていないため,このメソッドは指定値を無視します。
- 【形式】
public synchronized void setCursorName(String name) throws SQLException
- 【引数】
-
- String name:
-
カーソル名
- 【戻り値】
-
なし。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(x) setEscapeProcessing(boolean enable)
- 【機能】
-
このStatementオブジェクトによるエスケープ構文の解析を,有効又は無効にします。
デフォルトは有効です。
- 【形式】
public synchronized void setEscapeProcessing(boolean enable) throws SQLException
- 【引数】
-
- boolean enable:
-
エスケープ構文の解析を有効にする場合はtrue,無効にする場合はfalseを指定します。
- 【戻り値】
-
なし。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(y) setFetchDirection(int direction)
- 【機能】
-
このStatementオブジェクトから生成される結果集合の,デフォルトのフェッチ方向を指定します。
デフォルト値はResultSet.FETCH_FORWARDです。
- 【形式】
public synchronized void setFetchDirection(int direction) throws SQLException
- 【引数】
-
- int direction:
-
デフォルトのフェッチ方向ResultSet.FETCH_FORWARDだけ指定できます。
- 【戻り値】
-
なし。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
directionにResultSet.FETCH_FORWARD以外が指定された場合
-
(z) setFetchSize(int rows)
- 【機能】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの,デフォルトのフェッチサイズを設定します。0を指定した場合,クライアント環境定義に依存します。
- 【形式】
public synchronized void setFetchSize(int rows) throws SQLException
- 【引数】
-
- int rows:
-
フェッチする行数。設定できる範囲は0〜4096です。
- 【戻り値】
-
なし。
- 【機能詳細】
-
このStatementオブジェクトから生成されるResultSetオブジェクトの,デフォルトのフェッチサイズを設定します。0を指定した場合,クライアント環境定義に依存します。
デフォルトは0です。0以外の値を指定した場合,指定された値をクライアント環境定義PDBLKFの値として,ブロック転送機能を行います。ブロック転送機能については,「ブロック転送機能」を参照してください。
設定値と実際に使用されるPDBLKFの値の関係を次の表に示します。
表17‒26 設定値と実際に使用されるPDBLKFの関係 setFetchSizeの設定値(m)
クライアント環境定義PDBLKFの値(n)
ブロック転送機能で使用されるPDBLKFの値
0
1≦n≦4096
n
指定なし
指定なし
1≦m≦4096
1≦n≦4096
m
指定なし
m
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
rows<0,最大行数(getMaxRows()の値)<rows,4096(ブロックフェッチの最大値)<rowsのどれかに該当する場合
-
(aa) setMaxFieldSize(int max)
- 【機能】
-
このStatementオブジェクトによって生成されるResultSetオブジェクトの,文字及びバイナリの各列に対する最大バイト数を,指定されたバイト数に設定します。この最大バイト数は,[M|N][VAR]CHAR,BINARY,及びBLOBの各列にだけ適用されます。最大バイト数を超えた分は切り捨てます。
デフォルトは0です。
生成済みのResultSetオブジェクトには影響しません。
- 【形式】
public synchronized void setMaxFieldSize(int max) throws SQLException
- 【引数】
-
- int max:
-
新しい最大バイト数。0は無制限を意味します。最大バイト数が奇数値である場合,NCHAR,NVARCHARに対しては,最大バイト数-1を最大バイト数とします。最大バイト数に1を指定している場合,NCHAR,NVARCHARに対する最大バイト数が0となりますが,その場合は無制限の0として扱います。
- 【戻り値】
-
なし。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
maxに0未満の値が指定された場合
-
(ab) setMaxRows(int max)
- 【機能】
-
このStatementオブジェクトによって生成されるResultSetオブジェクトが,含むことのできる最大格納行数を設定します。最大格納行数を超えた行は,通知なしに除外されます。
デフォルトは0です。
生成済みのResultSetオブジェクトには影響しません。
- 【形式】
public synchronized void setMaxRows(int max) throws SQLException
- 【引数】
-
- int max:
-
新しい最大格納行数。0は無制限を意味します。ただし,結果集合の型がResultSet.TYPE_SCROLL_INSENSITIVEの場合は,0を指定してもInteger.MAX_VALUEが最大格納行数となります。
- 【戻り値】
-
なし。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
maxに0未満の値が指定された場合
-
(ac) setQueryTimeout(int seconds)
- 【機能】
-
SQL実行がタイムアウトになる秒数を設定します。
- 【形式】
public synchronized void setQueryTimeout(int seconds) throws SQLException
- 【引数】
-
- int seconds:
-
タイムアウトになる秒数
- 【戻り値】
-
なし。
- 【機能詳細】
-
SQL実行時の,HiRDBサーバとの通信の最大待ち時間(秒)を指定します。
0の場合,クライアント環境定義PDCWAITTIMEの設定値に依存します。
デフォルトは0です。
65536以上の値を設定している場合,このメソッドは指定値を無視します。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
secondsに0未満の値が指定された場合
-
(ad) isClosed()
- 【機能】
-
Statementオブジェクトがクローズされているかどうかの情報を取得します。
- 【形式】
public boolean isClosed() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
- true:
-
Statementオブジェクトがクローズされています。
- false:
-
Statementオブジェクトがオープン中です。
- 【機能詳細】
-
Statementオブジェクトがクローズされているかどうかの情報を取得します。次の場合はtrueが返されます。
-
Statementオブジェクトにclose()が発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合
-
- 【発生する例外】
-
なし。
(ae) isPoolable()
- 【機能】
-
Statementオブジェクトがプールできるかどうかを示す値を取得します。
- 【形式】
public boolean isPoolable() throws SQLException
- 【引数】
-
なし。
- 【戻り値】
-
- false:
-
Statementオブジェクトはプールできません。
- 【機能詳細】
-
Statementオブジェクトがプールできるかどうかを示す値を取得します。常にfalseが返されます。
- 【発生する例外】
-
次の場合,SQLExceptionを投入します。
-
Statementオブジェクトに対してclose()が既に発行されている場合
-
このStatementオブジェクトを生成したConnectionオブジェクトに対して,close()が既に発行されている場合
-
(3) パッケージ名称及びクラス名称
このインタフェースを実装するパッケージ名称とクラス名称を次に示します。
パッケージ名称:JP.co.Hitachi.soft.HiRDB.JDBC
クラス名称:PrdbStatement
(4) 注意事項
(a) setFetchSizeメソッドの指定によるブロック転送機能の利用
setFetchSizeメソッドに1以上を指定すると,JDBCドライバはブロック転送機能を利用して,引数で指定した行数の検索結果をHiRDBサーバに対して一度に要求します。ブロック転送機能の詳細は,「ブロック転送機能」を参照してください。
setFetchSizeメソッドの指定値に上限はありませんが,ブロック転送機能で一度に転送できる行数の最大は4,096行のため,4,097以上を指定しても実際の転送行数は4,096行以下になります。
JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数は,次の表に示す優先順位によって決定します。
優先順位 |
指定値 |
---|---|
1 |
ResultSetクラスのsetFetchSizeメソッドの引数で指定した値。 |
2 |
StatementクラスのsetFetchSizeメソッドの引数で指定した値。 |
3 |
クライアント環境定義PDBLKFで設定した値。 |
表「JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数の優先順位」に示す転送要求行数に対して,実際にJDBCドライバがHiRDBサーバから一度の通信で受け取る行数は,「1回の通信で転送する行数」を参照してください。ただし,「PDBLKF」は「表「JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数の優先順位」に示す優先順位で決定した転送要求行数」に,「FETCH文」は「ResultSetクラスのnextメソッド」に読み替えてください。
なお,検索結果が表「JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数の優先順位」に示す転送行数より多い場合,JDBCドライバは検索が終了するまで(又は,UAPからの検索要求がなくなるまで),HiRDBサーバに対して転送を要求します。
また,次のどれかの条件に一致する場合,HiRDBサーバからJDBCドライバが一度に受け取る行数は1になります。
-
結果集合の射影列にHiRDBのBLOB型を含む。
-
結果集合の射影列にHiRDBの定義長32,001以上のBINARY型を含み,クライアント環境定義PDBINARYBLKFの指定がNOである。
-
次の条件すべてに一致する。
-
接続時のプロパティLONGVARBINARY_ACCESS,又はDataSourceクラスのsetLONGVARBINARY_Accessの引数に,LOCATORを指定している。
-
次のどれかを指定している。
・SELECT文にUNTIL DISCONNECTを指定している。
・ConnectionクラスのcreateStatement,prepareStatementメソッドの引数resultSetHoldabilityに,ResultSet.HOLD_CURSORS_OVER_COMMITを指定している。
・接続時のプロパティ,又はURLの設定項目HIRDB_CURSORにTRUEを指定する。
・DataSourceクラスのsetHiRDBCursorModeの引数に,trueを指定している。
-
(b) cancelメソッドによる非同期キャンセル
cancelメソッドを使用すると,HiRDBサーバで処理中のSQLに対する非同期キャンセルを実行できます。該当するStatementオブジェクトがSQLを実行中でなくても,同一の接続オブジェクトに対してほかのオブジェクトがSQLを実行していると,非同期キャンセルを実行します。
HiRDBサーバで非同期キャンセルが実行されると,Statementオブジェクト及びResultSetオブジェクトをコミット実行後も有効とするかどうかの指定に関係なく,非同期キャンセル前に作成したPreparedStatementオブジェクト及びResultSetオブジェクトが無効になります。
オブジェクトをコミット実行後も有効とするかどうかの指定方法を次に示します。
-
DriverManagerクラスのgetConnectionメソッドの,引数Properties中のプロパティHiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR
-
URL中のSTATEMENT_COMMIT_BEHAVIOR
-
DataSource系インタフェースのsetStatementCommitBehavior
-
DriverManagerクラスのgetConnectionメソッドの,引数Properties中のプロパティHIRDB_CURSOR
-
URL中のHIRDB_CURSOR
-
DataSource系インタフェースのsetHiRDBCursorMode
-
ConnectionインタフェースのsetHoldabilityメソッド
-
ConnectionインタフェースのcreateStatement,prepareStatementメソッドの引数resultSetHoldability
-
SQL文(UNTIL DISCONNECTの指定)
該当するStatementオブジェクトがSQLを実行中でなく,かつ同一の接続オブジェクトに対してほかのオブジェクトがSQLを実行していないと,HiRDBサーバに対する非同期キャンセルを実行しません。
また,XADataSourceを使用した接続の場合は,非同期キャンセルの要求は有効となりません。
(c) executeXXXメソッド実行時のResultsetオブジェクトのクローズ
該当するStatementオブジェクトが生成したResultSetオブジェクトがクローズされていない状態でexecuteXXXメソッドを実行すると,以前生成したResultSetオブジェクトをクローズします。このため,executeXXXメソッド実行後,以前に生成したResultSetオブジェクトを使用して検索結果を取得しようとすると,SQLExceptionを投入します。SQLExceptionが発生する例を次に示します。
Statement st = con.createStatement(); ResultSet rs1 = st.executeQuery("select * from tb1"); ResultSet rs2 = st.executeQuery("select * from tb2"); rs1.next(); // SQLExceptionを投入する。 rs2.next();
(d) 1コネクション当たりのステートメントオブジェクト数の上限
1つのConnectionオブジェクトに対し,使用中のステートメントオブジェクトの数の合計が4096以上となった場合,SQLExceptionを投入します。対象となるオブジェクトを次に示します。
-
Statementオブジェクト
-
PreparedStatementオブジェクト※1
-
CallableStatementオブジェクト※1
-
DatabaseMetaDataオブジェクトのメソッドから返却されたResultSetオブジェクト※2
- 注※1
-
ステートメントプーリング/ステートメントキャッシュ機能を使用している場合,プール/キャッシュされているオブジェクトを含んだ数になります。該当する機能の詳細は,機能を提供する製品のマニュアルを参照してください。
- 注※2
-
ResultSetオブジェクトを返却するDatabaseMetaDataオブジェクトのメソッドでは,内部的にステートメントオブジェクトを1つ使用しています(この場合,ResultSetオブジェクトのclose時に,内部的なステートメントオブジェクトをcloseします)。
ステートメントオブジェクトを使用するメソッドを次に示します。
-
getProcedures
-
getProcedureColumns
-
getTables
-
getSchemas
-
getCatalogs
-
getTableTypes
-
getColumns
-
getColumnPrivileges
-
getTablePrivileges
-
getBestRowIdentifier
-
getVersionColumns
-
getPrimaryKeys
-
getImportedKeys
-
getExportedKeys
-
getCrossReference
-
getTypeInfo
-
getIndexInfo
-
getUDTs
-
getSuperTypes
-
getSuperTables
-
getAttributes
-
getClientInfoProperties
-
getFunctionColumns
-
getFunctions