SQLite C 接口
提交和回滚通知回调
void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
sqlite3_commit_hook() 接口注册了一个回调函数,只要事务被提交 就会被调用。先前为同一数据库连接调用 sqlite3_commit_hook() 设置的任何回调都将被覆盖。sqlite3_rollback_hook() 接口注册了一个回调函数,只要事务被回滚就会被调用。先前为同一数据库连接调用 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()接口。