小巧。快速。可靠。
三选二。

SQLite C 接口

计算修改的行数

int sqlite3_changes(sqlite3*);
sqlite3_int64 sqlite3_changes64(sqlite3*);

这些函数返回由最近完成的 INSERT、UPDATE 或 DELETE 语句修改、插入或删除的行数,这些语句作用于由唯一参数指定的数据库连接。这两个函数除了返回值类型和如果最近 INSERT、UPDATE 或 DELETE 语句修改的行数大于类型“int”支持的最大值,则 sqlite3_changes() 的返回值未定义之外,其他都相同。执行任何其他类型的 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()运行时,另一个线程对同一数据库连接进行更改,则返回值不可预测且没有意义。

另请参阅

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