我使用sqlite是全新的,所以我可能错过了一些基本的东西。
我已经创建了一个数据库并将其复制到我应用程序文档的目录中。我可以打开它,但是当我调用sqlite3_prepare_v2时,我收到SQLITE_ERROR,“SQL错误或缺少数据库”。
这是我的代码:
sqlite3 *database;
if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
sqlite3_stmt *compiledStatement;
NSString *sqlStatement = @"select * from dbname";
int result = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, &compiledStatement, nil);
...
}
相同的sql语句在终端中有效。
我在一些地方发现了这个问题,要么没有答案,要么解决方案无法解决我的问题。我希望有人能帮忙。感谢。
编辑:
使用Firefox的SQLite Manager工作,是通过终端创建的数据库文件的问题。
答案 0 :(得分:0)
由于您使用sqlite3_open
,如果dbPath
中的给定位置中尚不存在新的空数据库,则会自动创建新的空数据库。如果你改为使用sqlite3_open_v2
,你可以控制它只是打开一个现有的数据库,而不是在缺少时创建它。只需在第三个参数中传递标记SQLITE_OPEN_READWRITE
。
如果数据库以某种方式未按预期复制到应用程序文档文件夹中,则后一种方法应该抓住这一点。
希望这有帮助,
克劳斯