2

トランザクションの実行中に何かが発生した場合に、セーブポイントを使用して復元したいと考えています。

私が実行しているステートメントは次のとおりです。

const char *sqlSetSavePoint = @"savepoint updateSavepoint";

const char *sqlRollback = @"Rollback transaction to savepoint updateSavepoint";

これらのステートメントを実際に実行する多くのコードを明らかに省略しましたが、他のステートメントに対して同じメソッドを実行していて、それらが正常に機能しているため、問題はないと確信しています。挿入トランザクション (最大 20 万行の挿入) を実行する前にセーブポイントを設定しています。その後、何かが例外またはエラーをスローした場合は、ロールバックを試みます。

私の質問は; これらのロールバックステートメントは正しいですか(そして、私は何か間違ったことをしています)、またはiOSのsqlite3でセーブポイントを使用する他の方法はありますか?

編集: 明確にするために、いくつかのトランザクションを実行する前にセーブポイントを設定しようとしています。それらのいずれか、またはサーバーからのデータフェッチが失敗した場合は、セーブポイントに完全にロールバックします。それは単にこのようなものです:

"savepoint updateSavepoint"
    ->FetchDatafromServer()
          -> "Begin exclusive transaction"
               //sqlite3_bind functions
          -> "Commit transaction"
    ->FetchDatafromServer()
          -> "Begin exclusive transaction"
               //sqlite3_bind functions
          -> "Commit transaction"
    ->FetchDatafromServer()
          -> "Begin exclusive transaction"
               //sqlite3_bind functions
          -> "Commit transaction"
    ->FetchDatafromServer()
          -> "Begin exclusive transaction"
              !!Failure!!
"Rollback transaction to savepoint updateSavepoint"
4

1 に答える 1

2

トランザクション内または他のセーブポイント内でセーブポイントを使用できますが、セーブポイント内でトランザクションを使用することはできません

内部トランザクションをセーブポイントに置き換えます。

于 2012-11-19T14:56:48.483 に答える