我是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遇到问题。请帮忙。谢谢。
答案 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];