这是我的第一个基于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);
答案 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文件以嵌入您的应用程序