Small. Fast. Reliable.
Choose any three.

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()接口。

另请参见 对象常量函数的列表