zoukankan      html  css  js  c++  java
  • 记一次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,因为有的数据必须要执行才能保证正常功能。比如新建数据库等。

  • 相关阅读:
    things to analysis
    retrieve jenkins console output
    temp
    temp
    mysql on Mac OS
    Scala的几个小tips
    docker查看容器使用率
    JVM性能监控(jconsole和jvisualvm)
    线程死锁问题
    线程阻塞状态
  • 原文地址:https://www.cnblogs.com/xuepeng0521/p/6587170.html
Copyright © 2011-2022 走看看