2011-02-27 123 views
2

我一直在这个小时,必须得到这个工作!它支撑着iPhone应用程序的发布......我第一次使用SQLite。我已经遵循了所有的建议,但是我的sqlite3_prepare_v2调用每次都得到一个SQLITE_ERROR(1)!sqlite3_prepare_v2越来越SQLITE_ERROR

这里是我的控制器我的代码:

 NSString *query = @"SELECT * FROM QandA ORDER BY random() LIMIT 1"; 
// const char *sqlStatement = "SELECT * FROM QandA ORDER BY random() LIMIT 1"; 
    sqlite3_stmt *compiledStatement; 

    // sqlite3_stmt *statement; 
    int prepareStatus = sqlite3_prepare_v2(database, [query UTF8String], 
              -1, &compiledStatement, NULL); 
    if (prepareStatus == SQLITE_OK) {... 

你会注意到,我一直使用“字符*”也无济于事试过(其他的尝试中)。我的数据库打开罚款:

databaseName = @"Facts.sqlite"; 
// Get the path to the documents directory and append the databaseName 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
NSLog(@"databasePath = %@", databasePath); 

int dbOpenStatus = sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_READWRITE, NULL); 

从我的控制器接口:

NSString *databaseName; 
NSString *databasePath; 

我已经在调试器中检查,一切看起来不错,但准备语句失败。我不知道如何记录它正在编译的语句......我认为/希望这正是我的SELECT所说的。

任何人都可以帮忙吗?我很绝望。马克

+0

如果你想进入电影用Objective-C SQLite数据库,我会建议使用FMDB,https://开头的github .com/ccgus/fmdb – 2011-02-27 22:11:08

+1

好的,找出(最后)如何得到更详细的错误信息。准备调用的错误是“没有这样的表:myTableName”。它在那里,我也记录了MyDb.sqlite文件的完整路径。表*是错误中显示的名称,那么为什么会发生这种情况? – Mark 2011-02-28 00:46:48

+0

检出FMDB并将在未来考虑它。谢谢。 – Mark 2011-02-28 13:18:37

回答

6

找到了答案here。我不得不使用它代替的路径DB文件:

[[NSBundle mainBundle]pathForResource:@"Facts"extension:@"sqlite"]; 

这给了一个稍微不同的路径(一个额外的目录) - 一旦我用了它的工作!希望这可以帮助别人...我花了很多时间在这个。

+0

简单而有效。谢谢马克! – jcpennypincher 2011-09-15 15:22:35

+2

在这里相同,databasePath为空..我仍然相信这**如果(sqlite3_open(dbPath,&myDataBase)== SQLITE_OK)**应该返回false,所以错误会更容易跟踪 – codrut 2012-04-12 08:48:35

0

代码似乎很好,可能是一个愚蠢的问题,但你有创建QandA表内的数据库?

+0

不会是第一次进行骨头移动,但是,桌子就在那里。 – Mark 2011-02-28 13:18:11

1

请注意,上面的内容稍微不准确,ofType应该使用不扩展,并且ofType显然需要与您的文件扩展名相匹配。

如果您的数据库名为 “mysqldatabase.sql” 你的路径网址变更为:

databasePath = [[NSBundle mainBundle]pathForResource:@"mysqldatabase" ofType:@"sql"];