无效* sqlite3_update_hook( sqlite3 *, void(*)(void *,int,char const *,char const *,sqlite3_int64), 空白* );
sqlite3_update_hook()接口使用第一个参数标识的数据库连接注册一个回调函数,只要在rowid表中更新,插入或删除行时就将调用该参数。先前调用此函数为同一数据库连接设置的任何回调都将被覆盖。
第二个参数是指向在rowid表中更新,插入或删除行时要调用的函数的指针。回调的第一个参数是sqlite3_update_hook()的第三个参数的副本。第二个回调参数是SQLITE_INSERT,SQLITE_DELETE或SQLITE_UPDATE之一,具体取决于导致调用回调的操作。回调的第三个和第四个参数包含指向数据库的指针和包含受影响的行的表名称。最后的回调参数是该行的rowid。在更新的情况下,这是更新发生后的rowid。
修改内部系统表(即sqlite_sequence)时,不会调用更新挂钩。修改WITHOUT ROWID表时,不会调用更新挂钩。
在当前实现中,由于ON CONFLICT REPLACE子句而删除有冲突的行时,不会调用更新挂钩 。使用截断优化删除行时,也不会调用更新挂钩。本段中定义的异常可能会在将来的SQLite版本中更改。
更新挂钩实现不得做任何会修改调用更新挂钩的数据库连接的操作。修改数据库连接的任何操作都必须推迟到触发更新挂钩的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()接口。