SQLite的SQL查询记录?

28

我需要记录查询过程,不仅限于插入/更新/删除操作,还包括选择和其他查询操作,这些操作是由使用SQLite的多个应用程序执行的。在这种情况下,将日志记录引入到应用程序中实际上并不可行。那么我该如何在SQLite本身中启用查询日志记录?


1
只是为了添加更多信息,如果您在应用程序中使用SQLite,则应该使用不同的日志记录系统来处理整个应用程序,而不是请求内置SQLite函数。 - David Souther
1个回答

13

可以看一下sqlite的Trace API。你需要自己实现回调函数。

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

sqlite3_trace() 注册的回调函数会在通过 sqlite3_step() 执行 SQL 语句时被调用。回调函数返回 SQL 语句文本的 UTF-8 渲染形式,当语句开始执行时首先调用。每个触发的子程序进入时都会出现其他回调。


好的,你基本上是在说我需要编写记录日志的代码。我想知道是否已经有人为这样一个常见的用例做过了这件事? - Eemeli Kantola
你需要编写命令来调用内置的跟踪机制。 - Raj More
sqlite3_trace API不会显示绑定。如果您使用的是包装类,您可能需要自己记录SQL语句和参数的日志。 - eodonohoe
8
只是想提供一个基本日志记录的小片段: void trace_callback( void* udp, const char* sql ) { printf("{SQL} [%s]\n", sql); } sqlite3_trace(g_dbConf, trace_callback, NULL); - reflog
相当难写 - 我的基本尝试 https://stackoverflow.com/questions/66410173/could-sqlite3-generate-non-deterministic-errors - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接