私はsqliteがインストールされているC++プロジェクトを持っています。 sqlite3_column_textによって返されるSQLiteの奇妙な値
アプリケーションがこのコードを使用してデータベースを作成します開始し
:// Open connection with database
if (SQLITE_OK != sqlite3_open_v2("Test.db", &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, nullptr)) {
return false;
}
// Delete old tables if exists
char * error;
if (SQLITE_OK != sqlite3_exec(db, "DROP TABLE IF EXISTS Tests;", nullptr, nullptr, &error)) {
return false;
}
// Recreate all tables
if (SQLITE_OK != sqlite3_exec(db, "CREATE TABLE Tests(testID INTEGER PRIMARY KEY ASC, name TEXT NOT NULL);", nullptr, nullptr, &error)) {
return false;
}
// Test only
if (SQLITE_OK != sqlite3_exec(db, "INSERT INTO Tests(testID, name VALUES (1, 'Andrea');", nullptr, nullptr, &error)) {
return false;
}
私はこのコードを実行すると:
sqlite3_stmt *query = nullptr;
if (SQLITE_OK != sqlite3_prepare_v2(db, "SELECT testID, name FROM Tests;", -1, &query, nullptr)) {
}
unsigned char const * t = nullptr;
if (SQLITE_ROW == sqlite3_step(query)) {
t = sqlite3_column_text(query, 1);
sqlite3_finalize(query);
}
printf((char*)t);
私は「アンドレア」期待していますが、このコードの印刷を: - PÝòea - ð¶òea - 毎回ð§òea
異なる結果。
確定する前に印刷してください – tkausl
ありがとうございました、今すぐ機能します! –
別のバグがあります。 'sqlite3_step()'の結果に行がなくなると、SQLITE_DONEが返されます。その場合は 'sqlite3_finalize()'も呼び出す必要があります。したがって、 'sqlite3_finalize()'は 'if(SQLITE_ROW == sqlite3_step(query))'ブロックの後に置かなければなりません。 – BJovke