2009-10-22 267 views
23

我需要从许多使用SQLite的应用程序中记录查询,不仅插入/更新/删除,还可以选择其他查询。在这种情况下,向应用程序引入日志记录在实践中不是一个可行的解决方案。那么如何在SQLite中启用查询日志?SQLite的SQL查询日志记录?

+0

只需添加更多信息,如果您在应用程序中使用SQLite,则应该为应用程序整体使用不同的日志记录系统,而不是要求内置SQLite函数。 – 2010-12-23 21:07:42

+0

[在sqlite数据库中保留一个日志表?](https://stackoverflow.com/questions/422951/keeping-a-log-table-in-sqlite-database) – user4157124 2018-02-15 15:06:42

+0

这不是,因为另一个问题只记录对数据的修改,而这里的想法是记录像select这样的查询。编辑原始问题以明确此区别。 – 2018-02-18 04:25:43

回答

10

看看sqlite Trace API。你必须自己实现回调。

void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*); 

通过sqlite3_trace()注册的回调函数在不同的时间被调用时SQL语句是由sqlite3_step()运行。当语句首先开始执行时,回调将返回SQL语句文本的UTF-8呈现。当输入每个触发的子程序时会发生额外的回调。

+0

好的,所以你基本上说我需要编写日志记录代码。我想知道是否有人已经这样做了,对于这样的常见用例? – 2009-10-22 14:04:34

+0

您必须编写COMMAND来调用**内置**跟踪机制。 – 2009-10-22 14:15:01

+0

sqlite3_trace api不会显示绑定。如果你使用包装类,你可能想要自己记录sql语句和参数。 – eodonohoe 2009-10-22 14:53:08