8.4.42 Statementインタフェースに関する注意事項
(1) executeXXXメソッド実行時の注意事項
該当するStatementオブジェクトが生成したResultSetオブジェクトがクローズされていない状態でexecuteXXXメソッドを実行すると,以前生成したResultSetオブジェクトをクローズします。このため,executeXXXメソッド実行後,以前に生成したResultSetオブジェクトを使用して検索結果を取得しようとすると,SQLExceptionが投入されます。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();
(2) Statementオブジェクトのクローズ
Statementオブジェクトを使用したあとは,必ず明示的にcloseメソッドでStatementオブジェクトをクローズしてください。Statementオブジェクトを明示的にクローズすると,HADB内の対応する文ハンドルが解放されます。Statementオブジェクトをクローズしないと,文ハンドルが不足することがあります。
ただし,文ハンドルはCOMMITまたはROLLBACKでトランザクションを決着した場合も解放されます。したがって,トランザクションをある程度の間隔で決着させると,文ハンドルの不足を回避できます。