1
コメントのついていないSQLiteデータベースを継承しました。クエリと受信の内容を理解する必要があります。 sqlite3_stmt
ポインタが指している値を確認する方法はありますか?それはprintf()
またはNSLog()
でコンソールに印刷できるものですか?コマンドウィンドウでのsqlite3_stmt *の表示
おかげ
コメントのついていないSQLiteデータベースを継承しました。クエリと受信の内容を理解する必要があります。 sqlite3_stmt
ポインタが指している値を確認する方法はありますか?それはprintf()
またはNSLog()
でコンソールに印刷できるものですか?コマンドウィンドウでのsqlite3_stmt *の表示
おかげ
それを行うための最善の方法は、コンパイルされた文をトレースすることです。
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.']