【发布时间】:2015-02-24 00:54:53
【问题描述】:
我的 sqlite 准备语句有些困难。我收到一条错误消息,说我的表不存在,尽管我已经在多个地方检查过它,它确实存在,所以我很困惑。
- 该文件位于正确的 iPhone 模拟器应用程序文件夹中
- 该文件已添加到我的项目中,并可在项目导航器中查看
- 它也在我的构建阶段 - 复制捆绑资源区域。
- 我已经打扫干净,又开始跑步了。
-
数据库存在并且运行我的 sql 语句让我得到了 我预期的结果。
- (NSMutableArray *) getMyWorkout{ NSMutableArray *workoutArray = [[NSMutableArray alloc] init]; @try { NSFileManager *fileMgr = [NSFileManager defaultManager]; NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"IOSDB.sqlite"]; NSLog(@"Db path is %@",dbPath); BOOL success = [fileMgr fileExistsAtPath:dbPath]; if(!success) { NSLog(@"Cannot locate database file '%@'.", dbPath); } if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK)){ sqlite3_close(db); NSLog(@"Failed to open database with message '%s'.", sqlite3_errmsg(db)); } const char *sql = "SELECT Id, type, difficulty, duration, description FROM workoutTbl"; sqlite3_stmt *sqlStatement; if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK){ NSLog(@"%s Prepare failure '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(db), sqlite3_errcode(db)); } //...
当我运行它时,我得到文件路径和以下错误
2013-02-01 18:07:08.060 TriShake[9251:c07] -[MyWorkoutList getMyWorkout] Prepare failure 'no such table: workoutTbl' (1)
我已经检查了这些其他问题,但无法找到解决方案
我知道如果数据库路径不存在,sqlite3_open() 会为您创建一个空数据库,但我知道它存在,因此会产生挫败感。您能给我的任何帮助或指导将不胜感激。
【问题讨论】:
-
正如它所说的那样......检查您的数据库中的表名并确保它是正确的。确保表名是
workoutTbl,大小写匹配。如果该表不存在,您将需要创建它。它may为您创建数据库文件,但您仍然需要创建表模式。如果您已经创建了表,请发布您的架构。 -
首先确保您正在处理您认为的数据库。如果您尝试对捆绑包中的数据库进行操作,您将无法对其进行修改。如果您以某种方式弄乱了名称,SQLite 会很高兴地创建一个新的空表。但是 SQLite 在它的消息中是相当可靠的。如果它说没有同名的表,那么就没有。
-
(请注意,您的项目中可能有一个原型数据库,您认为该数据库已包含在捆绑包中,但事实并非如此。)
标签: iphone ios objective-c sqlite