【问题标题】:Why does SQLite not bring back any results from my database为什么 SQLite 没有从我的数据库中带回任何结果
【发布时间】:2010-01-28 15:38:23
【问题描述】:

这是我的第一个基于 SQLite 的 iPhone 应用程序,我正试图让它从我的数据库中读取菜单层次结构。

数据库似乎注册良好,因为编译语句没有错误(尝试输入有效的表名进行测试)但由于某种原因 sqlite3_step(compiledStmt) 不等于 SQLITE_ROW 好像暗示那里没有数据;有哪些。

sqlite3 *database;

menu = [[NSMutableArray alloc] init]; 

if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    const char *sqlStmt = "SELECT * FROM Menu";
    sqlite3_stmt *compiledStmt;

    if (sqlite3_prepare_v2(database, sqlStmt, -1, &compiledStmt, NULL) == SQLITE_OK) {
        while (sqlite3_step(compiledStmt) == SQLITE_ROW) {
            NSString *aTitle = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStmt, 1)];

            MenuItem *menuItem = [[MenuItem alloc] init];
            menuItem.title = aTitle;

            [menu addObject:menuItem];

            [menuItem release];
        }
    }
    else {
        NSLog(@"There is an error with the SQL Statement");
    }

    sqlite3_finalize(compiledStmt);

}

sqlite3_close(database);

【问题讨论】:

  • 我不开发 iPhone 应用程序,只是根据我所知道的进行调试。你能在到达sqlite3_step()之前打印出compiledStmt的内容吗?我看到它的位置,但我不知道它在哪里被初始化。 sqlite3_prepare_v2 做什么,准备声明?在你调用sqlite3_step()之前它的内容是什么?
  • 你能使用 Core Data 吗?如果是这样,我建议您采用“手动”方法:developer.apple.com/macosx/coredata.html
  • 话虽如此,如果 sqlite3_step(compiledStmt) 没有返回 SQLITE_ROW,它会返回什么?
  • AHHH 你为什么不使用 SQLite 包装器?!?!!我敢打赌,如果你这样做了,你的问题就会消失一半。
  • 哦,这是个主意,将您的 SQL 语句更改为“从菜单中选择 count(*)”。那应该总是返回一行,而且一旦你得到那一行,你就会知道菜单实际上有多少行。如果它为零,那么您的问题不在于您发布的代码。

标签: iphone objective-c sqlite


【解决方案1】:

回应您的 cmets:

核心数据可用于简单数据或复杂数据。设置很少,而且非常易于使用。教程方面,苹果自己的documentation是最好的。我自己是一名新的 iPhone 开发人员,我能够在几个小时内弄清楚。 Apple 有一个很棒的示例应用程序,名为 iPhoneCoreDataRecipes,它帮助我启动和运行。

另一种选择是查看 plist。它们也可以用于存储简单的数据;通常是配置数据。 David Janes 写了一个simple tutorial

【讨论】:

  • 好吧,我说的是大约 1000 条记录的数据集,Core Data 仍然是要走的路吗?是否像 SQLite 一样可查询?
  • 对不起,我错过了那部分 - Core Data 建立在 SQLite 之上,1000 条记录根本不是问题。
  • 那个菜谱演示看起来真的很好,似乎正在做我需要的,只是进一步开发它并且它​​使用的是 SQLite 数据库,但我仍然认为我会遇到同样的问题
【解决方案2】:

尽管有很多使用 Core Data 的建议,但我花了一个下午的时间研究它,这完全不适合我的需求。我需要在加载时在应用程序中存储/导入超过 1000 行数据,而 Core Data 无法以任何简单的方式做到这一点。

SQLite 仍然是理想的解决方案,但我仍然没有解决问题的方法。

编辑:

进一步的研究让我想到了这个惊人的例子:

http://cocoawithlove.com/2009/11/writing-parser-using-nsscanner-csv.html

使用一些 jiggary pockery,您可以将 CSV 等导入 SQLite 文件以嵌入到您的应用程序中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多