SQLiteOpenHelper的onCreate和onUpgrade的区别

        在应用程序中给sqlite创建表的时候,一般是在onCreate语句中创建一个表,然后编译程序。但今天发现了一个有趣的问题,就是android的创建一个表以后,再创建一个表时编译运行,会提示新创建的表不存在no such table,很郁闷搞了很久,通过把原来的程序卸载掉,再重新装上去可以解决问题。但是如果让用户使用需要升级的时候,总不能叫用户卸载了以后再安装软件吧。

        研究许久,发现自己并没有注意sqlite中有一个version,还有一个onUpgrade(>_<不要为了用而学,要学而用啊)。原来挺简单,只要在下一次改变数据库的时候,修改version的值,然后在onUpgrade加入建表语句就可以了。比如用户第一次安装软件的时候version为1,那创建数据库的时候会调用onCreate方法,后来你改变了功能,加入了新的表,并把version改为了2,那么用户下次安装的时候,因为数据库已经存在了,而且它会检查到version已经改变,用户打开软件第一次使用数据库的时候就不会再调用onCreate方法了,只会调用onUpgrade方法!

        也就是说,onCreate方法在软件中只会被调用一次(卸载了重装除外),onUpgrade则完全取决于version,version改变便会调用一次,这就是为什么要有onUpgrade的原因,主要是新老用户的数据库可能不一致,写程序时onCreate中一直是包含所有的建表语句,onUpgrade则是保存记录每一次版本变更做出的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值