Objective c sqlite select语句中未返回任何行

Objective c sqlite select语句中未返回任何行,objective-c,ios,sqlite,Objective C,Ios,Sqlite,我无法从数据库中选择数据。这里可能还为时过早,但看起来好像我从未得到任何返回,但我在while语句中插入了断点以停止,它从未到达代码的这一部分。我把事情搞砸了吗?我确实省略了create语句,因为它相当长,我认为它不相关,因为它确实包含(如果不存在的话)。我还验证了数据库中是否有我的所有数据 sqlite3 *database; if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {

我无法从数据库中选择数据。这里可能还为时过早,但看起来好像我从未得到任何返回,但我在while语句中插入了断点以停止,它从未到达代码的这一部分。我把事情搞砸了吗?我确实省略了create语句,因为它相当长,我认为它不相关,因为它确实包含
(如果不存在的话)
。我还验证了数据库中是否有我的所有数据

sqlite3 *database;
if(sqlite3_open([[self dataFilePath] UTF8String], &database)
   != SQLITE_OK) {
    sqlite3_close(database);
    NSAssert(0,@"Failed to open database");
}

NSString *createSQL = @"--CREATE STATEMENT HERE --";

char *errorMsg;

if(sqlite3_exec (database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
    sqlite3_close(database);
    NSAssert(0,@"Error creating table: %s", errorMsg);
}

NSString *query = @"SELECT name, number FROM DATA";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {
        int myNumber = sqlite3_column_int(statement, 1);
        char *name = (char *)sqlite3_column_text(statement, 0);
        NSString *message = [NSString stringWithFormat:@"Number: %d, Name: %@", myNumber,name];
        //DO MORE STUFF HERE.
    }
    sqlite3_finalize(statement);
}
sqlite3_close(database);
dateFilePath方法:

-(NSString*)dataFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"Spaces.sqlite"];
}

您正在选择名称和编号。。但是什么原因呢?您需要完成您的sql查询语句

您说您检查了数据是否存在,您是查看了模拟器文档文件夹中的副本,还是检查了Xcode项目中的副本?(如果可以的话,您确实需要检查数据库的内容以及模拟器上应用程序的Documents文件夹。)我询问的原因是,一个非常常见的错误是假设成功调用
sqlite3\u open
意味着它找到了您的数据库。没有。如果找不到您的数据库,它将为您创建一个空白数据库

如果您在编译之前准备好了数据库,我真的鼓励您使用
sqlite3\u open\u v2
而不是
sqlite\u open
,如下所述:

因此,如果这是问题所在,我建议:

  • 重置您的模拟器(通过模拟器菜单上的“重置内容和设置”,或删除应用程序并重新安装),以清除其中的任何空白数据库

  • 确保数据库包含在您的包中,如上面链接中所述

  • 确保以编程方式将数据库从捆绑包复制到文档,如下所述:

  • 并使用上述两个链接中所述的
    sqlite3\u open\u v2


  • 对不起,我删掉了大部分声明,因为它也很长。但是我试过使用我的长语句,使用正确的短语句,但仍然一无所获。您是否在external
    sqlite manager
    中执行了查询,结果是?是的,返回我需要的所有行。这就是为什么我被卡住了,我不明白为什么它不运行代码,在我看来一切正常。正如我在另一篇评论中所说的,我认为可能是我在SQL语句中犯了一个错误,所以我把访问列变得非常简单,但这仍然不起作用。