sqlite的update遇到的问题

这篇博客讨论了在SQLite中进行更新操作时遇到的问题,特别是如果不基于ID更新会导致数据被错误修改。作者展示了如何在iOS应用中使用FMDatabase库打开、创建数据库表,并加载数据。在更新数据时,强调了正确指定主键ID的重要性,以确保只更新目标记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在处理update的时候,发现如果不根据id来update会同时把其他的数据一起更改的现象,那么如何获取这个唯一的id呢:
- (void)loadData
{
    
    ///路径/
    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
                                                              NSUserDomainMask, YES)[0];
    
    // 拼接文件名
    NSString *filePath = [cachePath stringByAppendingPathComponent:@"makeup.sqlite"];
    
    // 创建一个数据库的实例,仅仅在创建一个实例,并会打开数据库
    FMDatabase *db = [FMDatabase databaseWithPath:filePath];
    _db = db;
    
    
    
    // 打开数据库
    BOOL flag = [db open];
    
    
    if (flag) {
        NSLog(@"打开成功");
    }else{
        NSLog(@"打开失败");
    }
    
    
    
    // 创建数据库表
    BOOL flag1 = [_db executeUpdate:@"create table if not exists t_makeup (id integer primary key autoincrement,productName text, productBrand text, openDate text, productExpiration text, productPrice text, productTip text ,productImage blob, productKind text,openEdate text,bestDate text, isOpen text);"];
    if (flag1) {
        NSLog(@"创建成功");
    }else{
        NSLog(@"创建失败");
        
    }
    

    //这句话很关键=  =
    _makeup = [NSMutableArray array];
    
    FMResultSet *result =  [_db executeQuery:@"select * from t_makeup where productKind = ?",self.name];
    
    
    // 从结果集里面往下找
    while ([result next]) {
        
        makeupModel *makeup = [[makeupModel alloc] init];
        
        
        makeup.productName = [result stringForColumn:@"productName"];
        makeup.productBrand = [result stringForColumn:@"productBrand"];
        makeup.productPrice = [result stringForColumn:@"productPrice"];
        makeup.openDate = [result stringForColumn:@"openDate"];
        makeup.productExpirationDate = [result stringForColumn:@"productExpiration"];
        makeup.productTip = [result stringForColumn:@"productTip"];
        makeup.productImage = [result dataForColumn:@"productImage"];
        makeup.productKind = [result stringForColumn:@"productKind"];
        makeup.openExpirationDate = [result stringForColumn:@"openEdate"];
        makeup.bestDate = [result stringForColumn:@"bestDate"];
        makeup.isOpen = [result stringForColumn:@"isOpen"];
<strong><span style="color:#ff0000;">        makeup.ID = [result intForColumn:@"id"];
</span></strong>        
        
        
        
        [self.makeup addObject:makeup];

    }
    
 

    //[self.tableView reloadData];

}

下面是处理update;
  BOOL flag = [_db executeUpdate:@"update t_makeup set productName = ? ,productBrand = ?, openDate = ? ,productExpiration = ? ,productPrice = ?, productTip = ?, productImage = ? ,productKind = ? ,openEdate = ?, bestDate = ? ,isOpen = ? where id = ?",Model.productName,Model.productBrand,Model.openDate,Model.productExpirationDate,Model.productPrice,Model.productTip,Model.productImage,Model.productKind,Model.openExpirationDate,Model.bestDate ,Model.isOpen,<span style="color:#ff0000;">[NSNumber numberWithInt:Model.ID]</span>];

注意加红部分

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值