2011-02-02 104 views
0

我在iPhone模拟器上遇到SQLite问题。我已经减少到一个简单的测试应用程序。 sqlite3_prepare_v2失败。但真正的设备工作正常。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

回答

1

确保您已经从模拟器&干净之前的所有目标构建&运行删除的应用程序图标。这可能会解决您的问题。

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)); 
0

从模拟器卸载应用程序并重新安装可能会起作用。

相关问题