所有这些在Windows上运行良好(完全相同的代码)。 OS X上没有那么多。我知道iOS和SQLite的其他问题,但这只是OS X 10.8和Xcode 4.4.1。
我有一个SQLite数据库,它可以很好地用于内存数据库,但不能在写入文件时使用。奇怪的是,我可以使用内存中的数据库并将其备份到文件中。
但等等,还有更多...
我可以在文件数据库上创建表格,当我查看它们时它们会正确显示。但是,当我尝试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:
做同样的事情可以正常工作。
有什么想法吗?
答案 0 :(得分: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;
}