SQLite查询在SQLiteManager上运行,但在iOS上运行

时间:2014-10-12 07:33:56

标签: ios sql objective-c sqlite

有一个sqlite问题。查询在firefox插件SQLiteManager上运行正常。但它不能在iOS上运行。我得到一个错误代码1.数据库连接正常。

NSString *sqLiteDb = [[NSBundle mainBundle] pathForResource:@"featureDB"
                                                     ofType:@"sqlite3"];

if (sqlite3_open([sqLiteDb UTF8String], &_database) != SQLITE_OK) {
    DLog(@"Failed to open database!");
} else {

    DLog(@"Connected to db");

}



NSString *query = [NSString stringWithFormat:@"SELECT * FROM featureTable"];

sqlite3_stmt *statement;


NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(_database));


if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {

        DLog(@"row");

        int uniqueId = sqlite3_column_int(statement, 0);



    }
    sqlite3_finalize(statement);

    DLog(@"sqliteStep");

} else {

    DLog(@"statement Error %d", sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil));

}

" row或sqliteStep"的日志永远不会开火。

3 个答案:

答案 0 :(得分:2)

您的else声明不应再次致电sqlite3_prepare_v2,而应该:

DLog(@"prepare error: %s", sqlite3_errmsg(_database));

此错误消息报告的内容是什么?

注意:在致电sqlite3_errmsg之前,您已登录sqlite3_prepare_v2。当然,这将报告没有错误,因为可能还没有发生错误。在else子句中执行此日志记录,您知道已调用sqlite3_prepare_v2(a);但是(b)没有返回SQLITE_OK。并且在sqlite3_prepare_v2失败和您记录错误消息的位置之间不要调用任何SQLite函数。

最常见的问题是它报告没有这样的表格。如果这就是您所看到的,在这种情况下可能是因为未能将数据库包含在应用程序包中(请参阅"复制捆绑资源""构建部分阶段"目标设置部分)。

或者,如果它说某些关于数据库的内容很忙,那么如果您的数据库打开调用和数据库关闭调用不匹配(如此代码示例中所示),则会发生这种情况。

答案 1 :(得分:1)

请确保在模拟器中运行应用程序时,未使用任何sqlite数据库浏览器打开sqlite数据库。 它发生在我身上,我在sqlite浏览器中打开了我的sqlite数据库来测试我的查询,当我从模拟器运行应用程序时,它没有在db中更新任何内容。

答案 2 :(得分:0)

问题是我的文件是sqlite扩展名,但代码指定了sqlite3的扩展名。我认为这两个是同义词,但他们不是