2009-10-22 114 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