DABroker for C++

[目次][用語][索引][前へ][次へ]

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

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

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

Execute (DBStatement, DBPreparedStatement)

↓ @ (Commit, Rollback)

GetResultSet (DBStatement, DBPreparedStatement)

↓ A (Commit, Rollback)

PageNext,Next (DBResultSet)

↓ B (Commit, Rollback)

PageNext,Next (DBResultSet)

↓ C (Commit, Rollback)

Refresh (DBResultSet)

↓ D (Commit, Rollback)

PageNext,Next (DBResultSet)

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

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

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

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