为什么SQLite不会从我的数据库中带回任何结果

时间:2010-01-28 15:38:24

标签: iphone objective-c sqlite

这是我的第一个基于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);

2 个答案:

答案 0 :(得分:0)

回应你的意见:

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

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

答案 1 :(得分:0)

尽管大多数人建议使用核心数据,但我花了一整天的时间研究它,这完全不适合我的需求。我需要在加载时在应用程序中存储/导入超过1000行数据,而Core Data无法以任何简单的方式执行此操作。

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

编辑:

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

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

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