2009-12-13 33 views
4

我有一个问题,我的应用程序将打开该数据库并选择从中行确定,SQLite的内存的准备时,INSERT语句

然后,当我想用​​下面的代码添加新行,我总是得到的在执行prepare_V2时出现以下问题。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error while creating add statement. 'out of memory'' 

代码.....

static sqlite3 *database = nil;     
static sqlite3_stmt *addStmt = nil; 


- (BOOL)addUserprofile { 

    addStmt = nil; // set to force open for testing 
    database = nil; // set to force creation of addstmt for testing 

    if (database == nil) { // first time then open database 
     NSString *databaseName = @"UserProfile.db"; 
     // Use editable database paths 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
     NSString *documentsDir = [paths objectAtIndex:0]; 
     NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
     NSLog(@"path = %@",databasePath); 

     NSLog(@"opening Database"); 
     sqlite3 *database; 
     // Open the database from the users filessytem 
     if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
      NSLog(@"Database Open"); 
      } 
     else { 
      NSLog(@"Database did not open"); 
     } 

    } 

    if(addStmt == nil) { 

NSLog(@"Creating add stmt"); 
     const char *sql = "INSERT INTO Profile (ProfileName) VALUES(?)"; 

    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) { 
      NSAssert1(0, @"** Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
      success = NO; 
      return success; 
     } 
    } 
    sqlite3_bind_text(addStmt, 1, [ProfileName UTF8String], -1, SQLITE_TRANSIENT); 
+0

错误消息是“错误而产生的更新语句”,而你的代码表示,“建立出错添加语句“ - 你确定你正在调试你正在运行的代码吗? –

+3

我想出了自己。打开的数据库不起作用。所以我摆脱了有条件的开放,并强制它打开每一次,现在的代码工作。我对添加和更新功能都有同样的问题。 –

+0

非常感谢您发布答案。 –

回答