データベースの検索は,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メソッドから実行し直す必要があります。
①~⑤のどのタイミングで実行しても検索を続行できます。特に制限はありません。