2011-10-18 3 views
1

コメントのついていないSQLiteデータベースを継承しました。クエリと受信の内容を理解する必要があります。 sqlite3_stmtポインタが指している値を確認する方法はありますか?それはprintf()またはNSLog()でコンソールに印刷できるものですか?コマンドウィンドウでのsqlite3_stmt *の表示

おかげ

答えて

1

それを行うための最善の方法は、コンパイルされた文をトレースすることです。

sqlite3_traceコマンドは、自分自身をコーディングする必要があるコールバックをトリガします。トレースがオンになると、残りのプログラムに対して実行されます。

私はすべてのデータベースアクセスルーチンを1つのクラスに持っており、これをコールバック関数(メソッドではなく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.'] 
関連する問題