我在iPhone模拟器上遇到SQLite问题。我把它简化为一个简单的测试应用程序。 sqlite3_prepare_v2失败。但真正的设备工作正常。
我使用sqlite3创建了一个数据库,并将其添加到我的资源中。在我的代码中,在viewDidLoad中,我调用createEditableCopyOfDatabaseIfNeeded(这是一种常见的,广泛使用的方法,随处可见)。然后我打电话给以下人员: -
- (void) queryDatabase {
sqlite3 *database;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"myDatabase.sql"];
if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
NSMutableString *result = [[NSMutableString alloc] init];
const char *sqlStatement = "select * from people";
sqlite3_stmt *compiledStatement;
if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
NSString *firstname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *surname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
[result appendFormat:@"%@ %@\n", firstname, surname];
}
[resultView setText:result];
}
else {
[resultView setText:@"Problem querying database"];
}
sqlite3_finalize(compiledStatement);
[result release];
}
sqlite3_close(database);
}
在模拟器上,sqlite3_prepare_v2不返回SQLITE_OK
答案 0 :(得分:3)
你能说出来,你得到了什么错误? 要查找错误,您可以使用
if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
答案 1 :(得分:1)
确保您已从模拟器&中删除了应用图标在构建&之前清理所有目标运行的。这可能会解决您的问题。
答案 2 :(得分:0)
从模拟器卸载应用程序并重新安装可能有效。