数据库表增加了新字段更新问题

本文讨论了数据库表结构更新时,如何在新增字段后进行异常检测及处理,以避免数据插入异常。重点阐述了检测新字段、捕获版本升级中可能遇到的异常情况,并详细介绍了相关代码实现。

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

- (void)fillGongkeListOnAlbumImageAndLyricBackImageWithEmptyString
{
    [[SLDatabase sharedDatabase] executeSQL:@"update gongke_list set album_image = '', lyric_back_image = '' where gk_id in (select gk_id from gongke_list)"];
}

- (void)checkGongkeListIfThereAnyExceptionWithVersion_1_5
{
    @try {
        SLStatement *stmt = [[SLDatabase sharedDatabase]prepareSQL:@"select album_image, lyric_back_image from gongke_list"];
        [stmt executeOrNext];
        [stmt close];
    }
    @catch (NSException *exception) {
        PRINT_LOG(@"V1.5 数据库升级用户信息表...");
        [[SLDatabase sharedDatabase]executeSQL:@"alter table gongke_list add album_image"];
        [[SLDatabase sharedDatabase]executeSQL:@"alter table gongke_list add lyric_back_image"];
        [self fillGongkeListOnAlbumImageAndLyricBackImageWithEmptyString];
    }
}



今天做一些新功能,需要修改到数据库表结构。
增加了两个新字段。
数据库表结构及数据是由json表读取来的
json表的更新是通过跟服务器通讯直接打包发送过来的。

以往的其他json表通过http Get方式获取的,数据库的检测新增字段/捕获异常操作
都是在 SocialSessionDatabase 单例(数据库接口函数,做成一个单例)的初始化完成的。

由于功课的json是通过协议直接获取,跟其他json的更新方式不一样,
并且在获取后直接更新到数据库,即有可能数据库单例已经初始化完成了,不会再检查是否添加了新字段
这样就会有个问题,例如当数据口接口单例已经初始化完毕后,此时如果更新了json表,并开始插入数据,就会产生异常。
所以在这里,每次更新前我们都要进行检测新字段的增加。

另外,增加了新字段后,在没有写入数据前,先读取数据会出现异常。
不明白为什么,出现错误的地方在:sqlite3_column_text()这个函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值