3.3.5 検索中のCommit,Rollbackについて

データベースの検索は,SQL文を前処理してカーソルを準備(Executeメソッド)し,その後カーソルをオープン(GetResultSetメソッド)して行います。DBMSによってはCommit又はRollback実行時にカーソルをクローズしたり,前処理を無効にするものがあります。カーソルをクローズすると,その状態で検索を続けることはできません。再度カーソルをオープンする必要があります。前処理が無効になった場合は,検索できません。検索するには,再度SQL文を前処理してカーソルを準備し,そのカーソルをオープンする必要があります。

検索時のCommit,Rollbackには以下のタイミングがあります。

Execute (DBStatement, DBPreparedStatement)

↓ ① (Commit, Rollback)

GetResultSet (DBStatement, DBPreparedStatement)

↓ ② (Commit, Rollback)

PageNext,Next (DBResultSet)

↓ ③ (Commit, Rollback)

PageNext,Next (DBResultSet)

↓ ④ (Commit, Rollback)

Refresh (DBResultSet)

↓ ⑤ (Commit, Rollback)

PageNext,Next (DBResultSet)

DBStatementクラス, DBPreparedStatementクラスのSetResultSetTypeメソッドでTYPE_EXCLUSIVEを指定して検索を実行した場合は,①のタイミングではまだカーソルをオープンしていません。④のタイミングではRefreshメソッドでカーソルを再オープンするためどちらも問題ありませんが,②,③,⑤のタイミングでCommit又はRollbackを実行した場合はカーソルを閉じてしまうため次の処理に進めません。この場合はRefreshメソッドで再検索を実行する必要があります。

SetResultSetTypeメソッドでTYPE_NONEを指定した場合は,①~⑤のどのタイミングで実行しても検索処理は継続できます。

SetResultSetTypeメソッドで指定した値にかかわらず,①~⑤のどのタイミングでCommit又はRollbackを実行してもカーソルが閉じられ,前処理が無効になってしまうため,検索処理は継続できません。再度Executeメソッドから実行し直す必要があります。

①~⑤のどのタイミングで実行しても検索を続行できます。特に制限はありません。