在命令窗口中查看sqlite3_stmt *

时间:2011-10-18 22:39:02

标签: objective-c sqlite

我继承了一个评论很差的SQLite数据库,我需要了解它的查询和接收内容。有没有办法看到sqlite3_stmt指针指向的值?是否可以在printf()NSLog()

中打印到控制台

由于

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是跟踪已编译的语句。我已经在这个问题的帮助下找到了解决方案:

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.']