sqlite no such table

在有时会在不同时刻创建数据表,这时候会创建多个OpenHelper操作数据库,有可能就会碰到no such table错误。

分析原因:创建数据库的表的时候,先判断数据库名是否相同,如果数据库名相同,并且数据库的版本名也是相同的,那么就会出现后面那张要创建的表通过OpenHelper的onCreate会创建失败,因为数据库名字和数据库版本名相同,就意味只操作同一个数据库,所以只会调用先前的OpenHelper的onCreate方法。

 如果要创建成功后面的数据表有三种解决方法:

  一、创建另外的数据库存放后面需要创建的表。(实际需求一般不这样做,一个项目不建议创建多个数据库)

 二、将数据库的创建全部都写在一个OpenHelper里面。就没有先后顺序了版本也只有一个,不会出现多个OpenHelpe数据库的版本问题。直接在第一个OpenHelper里面将所有创建数据表的SQL语句执行完。

 三、将后面创建表的SQL语句写在后面那个OpenHelper类的onUpgrade方法中,并且将(第一次创建数据库时,版本大小为0)版本在以前的基础上提升(将版本号变大),

如果当前传入的数据库版本号比上次创建或升级的版本号高,SQLiteOpenHelper就会调用onUpdate()方法。


实践发现。如果用第三种方法,在再次进入应用,调用第一个OpenHelper的构造方法,判断版本version的时候会出现版本向下转不了的情况,由于提升版本后,保存的是后面那个OpenHelper的高版本号,再次进入调用第一个OpenHelper的构造方法,两个版本不同,并且版本高于目前现在的这个OpenHelper的版本号,所以还是不可行,会出现onDowngrade转不了的错误。


还是建议使用第二种方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值