void *sqlite3_update_hook( sqlite3*, void(*)(void *,int ,char const *,char const *,sqlite3_int64), void* );
sqlite3_update_hook() 介面會向第一個參數所標識的資料庫連線註冊一個回呼函式,每當含有 ROWID 的資料表中的資料列被更新、插入或刪除時,就會呼叫此函式。先前對同一個資料庫連線呼叫此函式所設定的任何回呼都會被覆蓋。
第二個參數是指向在含有 ROWID 的資料表中更新、插入或刪除資料列時要呼叫的函式之指標。回呼函式的第一個參數是 sqlite3_update_hook() 的第三個參數的副本。第二個回呼參數是 SQLITE_INSERT、SQLITE_DELETE 或 SQLITE_UPDATE 其中之一,取決於觸發回呼的操作。回呼的第三和第四個參數包含指向包含受影響資料列的資料庫和資料表名稱的指標。最後一個回呼參數是資料列的 ROWID。如果是更新,則這是更新後的 ROWID。
修改內部系統資料表(例如 sqlite_sequence)時,不會呼叫更新 hook。修改 WITHOUT ROWID 資料表時,也不會呼叫更新 hook。
在目前的實作中,由於 ON CONFLICT REPLACE 子句而刪除衝突的資料列時,不會呼叫更新 hook。使用 truncate 優化刪除資料列時,也不會呼叫更新 hook。本段中定義的例外情況可能會在 SQLite 的未來版本中變更。
目前未指定在對應的變更之前或之後呼叫更新 hook,並且可能會根據變更的類型而有所不同。不要依賴 hook 呼叫與觸發 hook 的操作最終結果的順序。
更新 hook 的實作不得執行任何會修改呼叫更新 hook 的資料庫連線的動作。任何修改資料庫連線的動作都必須延遲到觸發更新 hook 的 sqlite3_step() 呼叫完成之後。請注意,就本段中「修改」的含義而言,sqlite3_prepare_v2() 和 sqlite3_step() 都會修改其資料庫連線。
sqlite3_update_hook(D,C,P) 函式會傳回先前在同一個資料庫連線 D 上呼叫的 P 參數,如果是第一次在 D 上呼叫,則傳回 NULL。
另請參閱 sqlite3_commit_hook()、sqlite3_rollback_hook() 和 sqlite3_preupdate_hook() 介面。