0

これらはすべて Windows でうまく機能します (まったく同じコード)。OS X ではそれほど多くはありません。iOS と SQLite に関する他の問題は認識していますが、これは OS X 10.8 と Xcode 4.4.1 だけの問題です。

私は、メモリ内データベースでは問題なく動作する SQLite データベースを持っていますが、ファイルへの書き込み時にはそうではありません。奇妙なことに、メモリ内の DB を取得してファイルにバックアップできます。

しかし、待ってください、もっとあります...

ファイル DBにテーブルを作成でき、それらを表示すると正しく表示されます。ただし、を試してみると、SELECT name FROM sqlite_master何も返されません。テーブルから何かを挿入またはクエリしようとすると、テーブルが見つからないというエラーが発生します。それはちょうどそれが何をしたかを見つけることさえできないようです。

例えば:

std::string filename = "test.db";
sqlite3* database = nullptr;
sqlite3_open(filename.c_str(), &database);
// ...
// Create tables...works
// Query from sqlite_master...broken

で同じことをし:memory:てもうまくいきます。

何か案は?

4

1 に答える 1

0

この単純な C プログラムは問題なく動作します。あなたが違うことをしている可能性があることを確認してください。

#include <stdio.h>
#include <assert.h>
#include <sqlite3.h>

int main(void)
{
    sqlite3 *db;
    sqlite3_stmt *stmt;
    int res;

    res = sqlite3_open("test.db", &db);
    assert(res == SQLITE_OK);

    res = sqlite3_exec(db, "create table if not exists tab(col)", NULL, NULL, NULL);
    assert(res == SQLITE_OK);
    res = sqlite3_exec(db, "insert into tab values('Hello, world!')", NULL, NULL, NULL);
    assert(res == SQLITE_OK);

    res = sqlite3_prepare_v2(db, "select * from tab", -1, &stmt, NULL);
    assert(res == SQLITE_OK);
    assert(sqlite3_column_count(stmt) >= 1);
    res = sqlite3_step(stmt);
    assert(res == SQLITE_ROW);
    printf("%s\n", sqlite3_column_text(stmt, 0));

    sqlite3_finalize(stmt);
    sqlite3_close(db);

    return 0;
}
于 2012-09-11T19:50:22.107 に答える