int sqlite3_changes(sqlite3 *);
此函数返回由only参数指定的数据库连接上最近完成的INSERT,UPDATE或DELETE语句修改,插入或删除的行数。执行任何其他类型的SQL语句都不会修改此函数返回的值。
仅考虑由INSERT,UPDATE或DELETE语句直接进行的更改-不计算由触发器, 外键操作或REPLACE约束解析引起的辅助更改。
被INSTEAD OF触发器拦截的视图更改 不计算在内。在视图上运行INSERT,UPDATE或DELETE语句后,sqlite3_changes()返回的值始终为零。仅计算对实际表所做的更改。
如果在运行触发器程序的同时执行sqlite3_changes()函数,则事情会更加复杂。如果程序使用changes()SQL函数,或者某些其他回调函数直接调用sqlite3_changes(),则可能会发生这种情况。本质上:
这意味着,如果触发器中的第一个INSERT,UPDATE或DELETE语句使用changes()SQL函数(或类似函数),则它将返回调用语句开始执行时设置的值。如果它被触发器程序中的第二个或后续此类语句使用,则返回的值将反映由同一触发器中的上一个INSERT,UPDATE或DELETE语句修改的行数。
如果在运行sqlite3_changes()时,一个单独的线程在同一数据库连接上进行了更改,则返回的值是不可预测的,并且没有意义。
也可以看看: