SQLite C 接口

数据变更通知回调

void *sqlite3_update_hook(
  sqlite3*,
  void(*)(void *,int ,char const *,char const *,sqlite3_int64),
  void*
);

sqlite3_update_hook() 接口向数据库连接 注册一个回调函数,该回调函数由第一个参数标识,每当在rowid 表中更新、插入或删除行时调用先前为同一数据库连接调用此函数设置的任何回调都将被覆盖。

第二个参数是指向在 rowid 表中更新、插入或删除行时要调用的函数的指针。回调的第一个参数是 sqlite3_update_hook() 的第三个参数的副本。第二个回调参数是SQLITE_INSERTSQLITE_DELETESQLITE_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()接口。

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