sqlite数据库没有更新iphone sdk中的修改数据

时间:2010-09-03 13:05:44

标签: iphone sqlite

我是新手iphone编码并在我的应用程序中使用sqlite问题是我的sqlite数据库没有更新修改后的数据,我正在关注基于sqlite的教程:

这就是我在做的事情: -

- (void) saveAllData {

 if(isDirty) {


  if(updateStmt == nil) {
   const char *sql = "update Work Set Engagement = ?, Status = ?, Where WorkID = ?";
   if(sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) != SQLITE_OK) 
    NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database));
  }

  sqlite3_bind_text(updateStmt, 1, [Engagement UTF8String], -1, SQLITE_TRANSIENT);
  sqlite3_bind_text(updateStmt, 2, [Status UTF8String], -1, SQLITE_TRANSIENT);
   //sqlite3_bind_double(updateStmt, 2, [Status doubleValue]);
  sqlite3_bind_int(updateStmt, 3, WorkID);
  //int Success = sqlit3_step(updateStmt);


  if(SQLITE_DONE != sqlite3_step(updateStmt))
   NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database));

  sqlite3_finalize(updateStmt);

  isDirty = NO;
 }

我正在使用:

- (IBAction) save_Clicked:(id)sender {


 //Update the value.
 //Invokes the set<key> method defined in the Work Class.
 [objectToEdit setValue:txtField.text forKey:self.keyOfTheFieldToEdit];
 [self.navigationController popViewControllerAnimated:YES];
}

单击保存按钮并执行:

- (void) setEngagement:(NSString *)newValue {

 self.isDirty = YES;
 [Engagement release];
 Engagement = [newValue copy];
}

- (void) setStatus:(NSString *)newNumber {

 self.isDirty = YES;
 [Status release];
 Status = [newNumber copy];
}

设置值,我猛击了我的头一千次,找不到我做错了可以用一些身体PLZ帮我这个......

这是我的getDBPath实现的代码

- (NSString *) getDBPath {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    return [documentsDir stringByAppendingPathComponent:@"CheckList.sqlite"];
}

我的数据库的代码: - (void)copyDatabaseIfNeeded {

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath]; 

if(!success) {

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"CheckList.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

    if (!success) 
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }   
}

1 个答案:

答案 0 :(得分:0)

您的代码没有显示打开数据库,但我猜您正在打开包含在您的应用包中的一个?如果是这样,您首先需要将数据库复制到应用程序的Documents目录中,因为应用程序包是只读的。

您可以使用以下命令获取Documents目录的路径:

[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]