Просмотр sqlite3_stmt * в командном окне - PullRequest
1 голос
/ 19 октября 2011

Я унаследовал плохо прокомментированную базу данных SQLite, и мне нужно понять, что она запрашивает и получает. Есть ли способ увидеть значение, на которое указывает указатель sqlite3_stmt? Это что-то, что может быть напечатано на консоли в printf() или NSLog()?

Спасибо

1 Ответ

1 голос
/ 02 июля 2012

Лучший способ сделать это - отследить скомпилированный оператор.Я нашел решение с помощью этого вопроса:

Команда sqlite3_trace запускает обратный вызов, который вам нужно кодировать самостоятельно.Как только трассировка будет включена, она будет выполняться для остальной части программы.

У меня есть все мои процедуры доступа к базе данных в одном классе, и я использовал это как функцию обратного вызова (это Cфункция, а не метод).

void traceCallback( void* udp, const char* sql ) 
{ 
    printf("{SQL} [%s]\n", sql); 
} 

Я включил трассировку в методе инициализации базы данных: он включается при открытии базы данных.

-(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.']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...