2016-04-15 13 views
0

私はSQLiteを新しく導入しましたが、C APIを使用してトランザクションを実行することに頭を抱えようとしています。この場合、2つのテーブルで2つの一貫した更新を実行するだけで済みます。SQLite C API:実行中のトランザクション、エラーへの応答

最も簡単な方法はthis tutorialのようです。 sqlite3_execのコマンドを組み合わせて使用​​すると、BEGINで始まり、COMMITで終わります。したがって、ROLLBACKを実行することはありません。また、エラーが発生した場合、自動的にロールバックするSQLiteを使用していると考えられます。

問題は、the manualのトランザクションエラー処理に関するセクションはかなり複雑であり、これは良いアプローチであることはわかりません。手動でロールバックすることも提案されています。

次のアプローチは、単一のBEGINを実行し、各ステートメントを個別に実行してエラーをチェックし、最後にCOMMITまたはROLLBACKを実行することです。これは実際にはそれなりに良いのでしょうか?

答えて

0

sqlite3_exec()は、最初にエラーが発生した場合に中止しますが、ほとんどのエラーは自動的なロールバックにはなりません。

最初にBEGINを実行してから、トランザクション内のすべての処理を行い、COMMITまたはROLLBACKのどちらかでトランザクションを終了する必要があります。

ROLLBACKの場合は、エラーを無視することができます。トランジションが既にロールバックされているか、とにかく何もできないことがあります。

関連する問題