关于Android数据库版本升级的一点资料

在网上找了大把大把的资料、还是没能怎么弄清楚关于SQLite升级。固把一些网上找到的资料跟自己摸索出来的东西一起发出来。望有厉害的前辈能够指点一二。


      先上网上一些高手的资料:http://blog.sina.com.cn/s/blog_6400e5c50101mgu4.html   、http://blog.csdn.net/yaya_soft/article/details/17089353 、 http://www.iteye.com/topic/1127838。


其中我所在的情况跟第三位前辈所遇到的情况一样, 先说Android SQLite吧, Android系统本身自带了一个建立SQLite的工具SQLiteOpenHelper、我们只要继承它,里面有几个重写的方法。



  为了方便快捷、我只列出了onCreate方法跟onUpgrade方法。  onCreate方法是我们第一次创建数据库的时候会调用,onUpgrade()是我们数据库版本号不一样的时候会调用。网上很多资料都说如果要进行数据库升级,那就直接在onUpgrade里面写你所需要的进行的操作。比如:



至于里面代码具体的作用可以参照上面第一 第二个链接,里面有详细解释。  

 本人的情况是:本人使用外带的可视化工具直接把数据库跟表都已经建立好了,直接复制在raw目录下面。就没有通过系统自带的方法来建立数据库跟表。于是网上找资料一直不明白他们所谓的 在onUpgrade里面进行升级。 因为本人代码压根就没onUpgrade方法可以使用。  完了在网上找到各种资料、最终明白:无论你是用系统自带的SQLiteOpenHelper工具建立数据库跟表、还是使用外带工具。如果你要进行数据库升级。你所需要的操作都是一样的。只是系统自带的里面有onUpgrade()方法直接调用。而用外带工具的话你肯定也有一个自己写的SQLite操作类、只是使用自己写的操作类的话、onUpgrade()方法也是我们自己写。  反正里面要进行的操作都是一样的。

现在就看看如何进行数据库升级。



关于这块代码、如果你使用自己写的SQLite操作类,那你一看就明白。我们只需要得到db对象。就可以使用 db.execSQL("ALTER TABLE Subscription ADD COLUMN Activation BLOB");   这个和SQLiteOpenHelper里面onUpgrade()方法里面的操作是一样的;同样是升级数据库的操作。

 接下来就说说怎么判断数据库需要升级、这个就是涉及到版本匹配了、



再看这块代码、我们只要拿到db对象、就可以拿到db对应的版本、同时也可以更新db 的版本。完了我们可以参照上面链接中第三位前辈的方法、把我们最新的数据库版本定义在versionCode在AndroidManifest.xml文件中。  这样你最新数据库版本跟以前数据库版本都有了 、就可以判断更新不更新。这里解释下关于外带数据库的一些事情: 外带数据即我们通过sqlite expert professional可视化 工具建立一个sqlite.db文件、同时把文件放在raw目录下、我们每次进行数据库操作的时候就会先把raw目录下的sqlite.db复制到手机里面的路径下(如果手机路径里面存在sqlite.db就不复制)、完了以后每次取数据库都是从手机路径里面取的。如果我们raw目录下的sqlite.db进行了更新(我们自己把数据表改下、直接替换 ).同时我们的apk版本进行升级更新的时候覆盖安装apk。我们手机目录下的sqlite.db是不会更新的,还是旧版本。 但是我们raw目录下的sqlite.db是新版本。这个时候也不会再复制到手机。 这就需要我们把手机目录下的sqlite.db替换成raw目录下的。    写到这里我又想起一个事情:以前有位同事问为什么要把raw目录下的sqlite.db复制到手机、然后又操作手机路径下的sqlite.db 这不是多此一举吗。他说可以把sqlite.db放在assets目录下、不复制到手机路径。直接就是操作assets目录下的sqlite.db,这样每次数据库更新就直接替换assets目录下的sqlite.db。    我不知道放在assets目录下的好处、同时也不知道放在raw 然后复制到手机路径的好处。  这些我都不知道(望高人指点), 我只知道反正就是不能直接替换salite.db , 直接替换的话就是把旧版本的sqlite.db删除、再安装新版本的sqlite.db。

如果这样操作的话好像以前的数据都会丢失、就好像卸载重装一样。 无论何种方式我们要想保留数据都要进行数据的转移。关于数据转移前面给的链接中有。这里就不多讨论了。  发这篇文章只是自己搞这块的时候,一直被网上说的在onUpgrade()方法中直接更新搞糊涂了。 在这里记下来、免得下次不记得。        

嗯 就这样子吧、 第一次写文章 、写得不好、主要是为了自己记一下。 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值