记一次Android数据库升级bug

 @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        LogUtils.d(TAG, "onUpgrade");
        switch (oldVersion) {
        case 1://version1
            //……
        case 2://version2
            db.execSQL(sql_emoji);
        case 3://version3
            String leastAdd = "ALTER TABLE " + TABLE_NAME_LEAST + " ADD COLUMN format varchar(10)";  // 增加'format'字段  标识文字表情
            db.execSQL(leastAdd);case 4:
            LogUtils.d(TAG, "sql onUpgrade 4->5");

            db.execSQL(sql_update_collect_url);//要加try catch,SQLiteConstraintException: UNIQUE constraint failed: least_use_expression.url
            db.execSQL(sql_update_least_use_url);

            db.execSQL(sql_compilation);
            db.execSQL(sql_compilation_relation);
     default: break; } }

   如上是数据库升级代码,之前版本一直没有出过问题。从4-》5却又好几个用户反馈,但绝大多数用户没有问题,测试过程中也没发现问题。猜测是部分用户特定的数据导致数据库升级失败。仔细检查发现前2行对数据库操作可能会导致主键冲突,尝试加入try、catch后问题解决。

  结论:对于可能导致操作异常的sql语句增加try、catch,但是不能对所有sql语句增加try、catch,因为有的数据必须要执行才能保证正常功能。比如新建数据库等。

转载于:https://www.cnblogs.com/xuepeng0521/p/6587170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值