开发者社区> 问答> 正文

android 夸版本升级问题?报错

比如说,我最近版本升级了5次,每次都调整了表结构,也就是说,每次升级的时候,我的表结构做了响应调整,但是这样的话,如果有人夸版本升级的时候,导致部分表结构没办法更新,导致程序运行报错,请问有什么好的办法哦?

展开
收起
爱吃鱼的程序员 2020-06-14 15:05:55 506 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    引用来自“loyal”的评论

    你检测啊.向下兼容啊!第五次里包含前四次的表结构更新.

    引用来自“loyal”的评论

    你在逗我么?....你当然是判断它是从哪个版本升级到你现在的版本,然后就去升级它的表结构.

    可以一次性升级到现在的表结构,就是你自己整理出表结构变化sql.每个越级的你都要整理出来一个.然后根据越级的状况来执行某一个.


    另一种方法是,从原版本到现在的版本,依次执行表结构变化的sql.最终不就得到了现在要的表结构了吗?

    回复 @loyal:码农何苦为难码农。。。其实我觉得最简单的办法是,以最新的表结构为准,之前的版本的表结构,缺啥字段补啥字段,多了字段删除,这样不就完美解决了?我是不理解什么是“夸版本升级”才进来的
    去做检测呀。。看看兼容性这块有没有做好,看看这个能不能用 http://t.cn/R2gpSpW 哈哈,遇到过楼主相同的问题,用 try...catch的方式解决了

    你代码里怎么处理的?

    SQLiteOpenHelper

    里面应该有

          
           publicvoidonUpgrade(SQLiteDatabasedb,
           
            intoldVersion,
            
             intnewVersion){
            
           
          

    这个东西的啊?

    然后你根据老版本号,switchcase,不要加break,他就会根据用户当前版本号,一个一个升级脚本跑上来了。不会出问题的啊


    比如

    switch(old){

    case1:

       //sql1;

    case2:

       //sql2;

    }

    只要你的case是按照版本号递增的写出来的,就不会有问题的啊 他跳版本,从1跳到10,那么就case1-case10都执行,等于升级10次

    引用来自“黑狗”的评论

    SQLiteOpenHelper

    里面应该有

           
            publicvoidonUpgrade(SQLiteDatabasedb,
            
             intoldVersion,
             
              intnewVersion){
             
            
           

    这个东西的啊?

    然后你根据老版本号,switchcase,不要加break,他就会根据用户当前版本号,一个一个升级脚本跑上来了。不会出问题的啊


    比如

    switch(old){

    case1:

       //sql1;

    case2:

       //sql2;

    }

    只要你的case是按照版本号递增的写出来的,就不会有问题的啊 他跳版本,从1跳到10,那么就case1-case10都执行,等于升级10次

    那就是你自己程序没有调试好其中一个版本根本就是错误的问题没有出现在你最新的这个版本上而是你曾经的问题根本就没有结局

    引用来自“黑狗”的评论

    SQLiteOpenHelper

    里面应该有

             
              publicvoidonUpgrade(SQLiteDatabasedb,
              
               intoldVersion,
               
                intnewVersion){
               
              
             

    这个东西的啊?

    然后你根据老版本号,switchcase,不要加break,他就会根据用户当前版本号,一个一个升级脚本跑上来了。不会出问题的啊


    比如

    switch(old){

    case1:

       //sql1;

    case2:

       //sql2;

    }

    只要你的case是按照版本号递增的写出来的,就不会有问题的啊 他跳版本,从1跳到10,那么就case1-case10都执行,等于升级10次

    嗯,同样遇到了这个问题,覆盖安装后直接fc。我的办法是当两个版本中有冲突时,将数据库表中数据直接删除并要求用户重新登录。希望有更好的办法
    2020-06-15 11:07:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载