FMDB sqlite无法更新设备上的表,但可以在模拟器上更新

时间:2015-01-29 07:12:44

标签: ios sqlite sql-update device fmdb

我是iOS应用中的新手。在我的iPhone应用程序中,我有一个数据库类型sqlite(data.sqlite)和那里的一些表(只是调用表:A,B,C,...) 当我尝试将数据更新到表时,我遇到了问题:表A可以在模拟器和iPhone设备上成功更新。但是表B只能在模拟器上更新,无法在iPhone设备上更新(更新后,它显示新数据,但如果真的关闭应用程序 - 双击主页按钮,然后关闭应用程序。然后再次打开应用程序,数据是OLD数据)

此代码适用于init数据库

- (id)init {
    self = [super init];

    NSString *bundelFilePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"sqlite"];
    NSString *dbPath = [LIBRARY_DIR stringByAppendingPathComponent:@"data.sqlite"];

    //New version
    if ( ![[NSFileManager defaultManager] fileExistsAtPath:dbPath] ) {
        [[NSFileManager defaultManager] copyItemAtPath:bundelFilePath toPath:dbPath error:nil];

        _database = [FMDatabase databaseWithPath:dbPath];
        [_database open];
    }

    return self;
}

此代码用于更新

- (void)updateDetails:(NSMutableArray *)details {

    @synchronized(self) {
        [_database beginTransaction];

        for (int i = 0; i< details.count; i++) {
            B *b = [details objectAtIndex:i];

            NSString *sql = [NSString stringWithFormat:@"UPDATE B SET display_order=%d WHERE columnIdx=%d", i, b.colIdx];

            [_database executeUpdate:sql];
        }

        [_database commit];
    }
}

我对更新表A使用相同的代码,表A在设备和模拟器上成功更新。但表B遇到问题。请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

Ty替换:

NSString *sql = [NSString stringWithFormat:@"UPDATE B SET display_order=%d WHERE columnIdx=%d", i, b.colIdx];

使用:

NSString *sql = [NSString stringWithFormat:@"UPDATE B SET display_order=? WHERE columnIdx=?", [NSNumber numberWithInt:i], [NSNumber numberWithInt:b.colIdx]];

你有一些数字对象:

[NSNumber numberWithFloat:floatNumber];

[NSNumber numberWithDouble:doubleNumber];