1
我已經繼承了一個很差的SQLite數據庫,我需要了解它在查詢和接收的內容。有沒有辦法看到指針指向的值爲sqlite3_stmt
?是否可以通過printf()
或NSLog()
打印到控制檯?在命令窗口中查看sqlite3_stmt *
謝謝
我已經繼承了一個很差的SQLite數據庫,我需要了解它在查詢和接收的內容。有沒有辦法看到指針指向的值爲sqlite3_stmt
?是否可以通過printf()
或NSLog()
打印到控制檯?在命令窗口中查看sqlite3_stmt *
謝謝
最好的辦法是跟蹤編譯後的語句。我在這個問題的幫助下找到了一個解決方案:
sqlite3_trace命令觸發一個回調,您需要自己編寫代碼。一旦跟蹤打開,它將執行該程序的其餘部分。我已經將所有的數據庫訪問例程都放在一個類中,並且我將它用作回調函數(它是一個C函數,而不是一個方法)。
void traceCallback(void* udp, const char* sql)
{
printf("{SQL} [%s]\n", sql);
}
我在一個init數據庫方法中打開了跟蹤:一旦打開數據庫就打開它。
-(void)initializeDatabase
{
NSString *path = [self createEditableCopyOfDatabaseIfNeeded];
// open the db
if (sqlite3_open([path UTF8String], &db) == SQLITE_OK)
sqlite3_trace(db, traceCallback, NULL);
else {
// error - cleanup
sqlite3_close(db);
NSLog(@"Error opening db");
NSLog(@"Path: %@",path);
}
}
這會將帶有綁定變量的SQL語句轉換爲字符串。 從這:
const char *sql2 = "select a.key, b.key from words a left outer join known_words b on a.key = b.word_id where a.word_foreign = :word_foreign";
要這樣:
{SQL} [select a.key, b.key from words a left outer join known_words b on a.key = b.word_id where a.word_foreign = 'bak.']