iphone上的sqlite可以打开db但不准备语句

时间:2010-04-04 01:01:23

标签: iphone sqlite

我使用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工作,是通过终端创建的数据库文件的问题。

1 个答案:

答案 0 :(得分:0)

由于您使用sqlite3_open,如果dbPath中的给定位置中尚不存在新的空数据库,则会自动创建新的空数据库。如果你改为使用sqlite3_open_v2,你可以控制它只是打开一个现有的数据库,而不是在缺少时创建它。只需在第三个参数中传递标记SQLITE_OPEN_READWRITE

如果数据库以某种方式未按预期复制到应用程序文档文件夹中,则后一种方法应该抓住这一点。

希望这有帮助,

克劳斯