void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
sqlite3_commit_hook() 介面會註冊一個回調函式,每當事務被提交 (commit) 時就會被呼叫。任何先前透過 sqlite3_commit_hook() 為相同資料庫連線設定的回調都會被覆蓋。 sqlite3_rollback_hook() 介面會註冊一個回調函式,每當事務被復原 (rollback) 時就會被呼叫。任何先前透過 sqlite3_rollback_hook() 為相同資料庫連線設定的回調都會被覆蓋。 pArg 參數會傳遞給回調函式。如果提交鉤子函式的回調傳回非零值,則提交會轉換為復原。
sqlite3_commit_hook(D,C,P) 和 sqlite3_rollback_hook(D,C,P) 函式會傳回先前在相同資料庫連線 D 上呼叫相同函式時的 P 參數,如果是第一次在 D 上呼叫每個函式,則傳回 NULL。
提交和復原鉤子回調不可重入。回調實作不得執行任何會修改呼叫該回調的資料庫連線的動作。任何修改資料庫連線的動作都必須延遲到觸發提交或復原鉤子的 sqlite3_step() 呼叫完成之後。請注意,執行任何其他 SQL 陳述式(包括 SELECT 陳述式),或僅僅呼叫 sqlite3_prepare_v2() 和 sqlite3_step() 都會修改此段落中「修改」意義下的資料庫連線。
註冊 NULL 函式會停用回調。
當提交鉤子回調程式傳回零時,COMMIT 操作允許正常繼續。如果提交鉤子傳回非零值,則 COMMIT 會轉換為 ROLLBACK。復原鉤子會在因提交鉤子傳回非零值而導致的復原上被呼叫,就像任何其他復原一樣。
就本 API 而言,如果執行明確的「ROLLBACK」陳述式,或錯誤或約束導致發生隱式復原,則稱事務已被復原。如果事務因為資料庫連線關閉而自動復原,則不會呼叫復原回調。
另請參閱 sqlite3_update_hook() 介面。