最近上架了一个算法学习类APP,在更新应用版本时,发现数据库依旧没有更新,还是上一个版本的数据内容,遂把这方面的内容记录下来。

PS:本人处女作APP 《算法之家》 可以在豌豆荚、360手机助手、腾讯应用宝中下载安装~

如下是父类的构造函数,所有的数据库都是继承这个父类的。

 public MyOpenHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
} //笔记
public MyOpenHelper(Context context, String name) {
super(context, name,null,VERSION);
// TODO Auto-generated constructor stub
} public MyOpenHelper(Context context) {
super(context, null,null,mVERSION);
// TODO Auto-generated constructor stub
} public MyOpenHelper(Context context, String name,int version) {
super(context, name, null, version);
// TODO Auto-generated constructor stub
} @Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub }

1、当我们使用new MyOpenHelper(context)去构造的时候,会经常性的执行子类中public void onCreate(SQLiteDatabase db)这个方法,因此这样可以不用更新,但是使用这样的方式去构造的数据库,用户不能update,不能insert,只能在构造的时候insert。。

2、当我们使用new MyOpenHelper(context,name)去构造的时候,只会执行一次子类中的onCreate方法,也就是说如果我们在以后升级应用时,想要更新此数据库中的内容,需要另寻他法,所以数据库的版本的重要性就体现出来了,也就是super(context, name,null,VERSION);的VERSION关键字,当系统发现该数据库版本比原应用的数据库版本高,则会自动调用onUpgrade方法,所以有了如下代码。

 @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub switch(oldVersion){
case 1:
Version2(db);
break;
case 2:
Version3(db);
break;
case 3:
break;
case 4:
break;
default:
System.out.println("default");
break; }

比如原数据库版本为1,此时就会执行case 1:的指令。

在修改数据库中需要添加这样几行代码

 private void Version2(SQLiteDatabase db) {
// TODO Auto-generated method stub db.beginTransaction(); //改名数据库表
db.execSQL("alter table TABLE1 rename to TABLE2"); //新建表单
db.execSQL("create table TABLE1(XX,XX)"); //插入原有的数据
db.execSQL("insert into TABLE select * from TABLE2");
//如果增加了列属性,则使用双引号”” 来补充原来不存在的数据 //删除临时表单
db.execSQL("drop table TABLE2"); db.setTransactionSuccessful();
db.endTransaction(); }

如此,差不多了。

Android版本更新之本地数据库更新的更多相关文章

  1. Android 使用SQLite本地数据库

    参考:http://blog.csdn.net/jianghuiquan/article/details/8569252 在Android平台上,集成了一个嵌入式关系型数据库—SQLite.以SQLi ...

  2. Android应用查看本地数据库

    使用Android Studio 视图==>工具窗口 == >Device File Explorer ==> 文件在 data/data目录下,你的应用程序报名,右键save as ...

  3. Windows Phone本地数据库(SQLCE):13、更新数据(翻译)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第十三篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的 ...

  4. Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作

    一.前言 在手机中进行网络连接不仅是耗时也是耗电的,而耗电却是致命的.所以我们就需要数据库帮助我们存储离线数据,以便在用户未使用网络的情况下也可以能够使用应用的部分功能,而在需要网络连接的功能上采用提 ...

  5. 【转】Android动态破解微信本地数据库(EnMicroMsg.db)

    最近在公司接了一个任务,需要在几百台手机上安装一个app,目的是获取微信里面的通讯录,并且定时的把他发送到我们的服务器上.当时依次尝试的如下几个方案: 1.通过群控,将好友截图发送到服务端(pytho ...

  6. Xamarin.Android 本地数据库 SQLiteDatabase 操作

    目的:使用 SQLiteDatabase 创建本地数据库.表,并对数据进行增删改查操作. 引用命名空间: using Android.App; using Android.Widget; using ...

  7. android本地数据库,微信数据库WCDB for Android 使用实例

    android本地数据库,微信数据库WCDB for Android 使用实例 Home · Tencent/wcdb Wikihttps://github.com/Tencent/wcdb/wiki ...

  8. Android数据库更新——上万条数据的插入

    在实际情况下,很可能遇到会向一个表中插入10万条数据,而这样的数据库更新,如果用寻常的方式,在SQLiteOpenHelper.onUpdate()方法中不断的执行SQL语句,那么效率是可想而知的,甚 ...

  9. Android笔记之使用ImageView加载网络图片以及保存图片到本地并更新图库

    ImageView显示网络图片 findViewById(R.id.btnLoad).setOnClickListener(new View.OnClickListener() { @Override ...

随机推荐

  1. 并发工具类:CountDownLatch、CyclicBarrier、Semaphore

    在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...

  2. 【java开发系列】—— struts2简单入门示例

    前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了js ...

  3. C#扩展特性

    今天跟同事讨论技术,无意发现的C#3.0的一个新特性,高手可以直接忽略. 这个特性叫扩展,我觉得非常的方便所以就记录下来了.以下是我的测试代码: public static class test { ...

  4. javascript对json对象的序列化与反序列化

    首先引入一个json2.js.官方的地址为:https://github.com/douglascrockford/JSON-js 这里为了方便我直接贴上源代码 /* json2.js 2013-05 ...

  5. url传值错误

    ValueError at /add/ invalid literal for int() with base 10: ''6'' Request Method: GET Request URL: h ...

  6. HTML5 Canvas arc()函数//////////////////////(转)

    HTML5 Canvas arc()函数   实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.get ...

  7. Access数据库中Sum函数返回空值(Null)时如何设置为0

    在完成一个Access表中数据统计时,需要统计指定字段的和,使用到了Sum函数,但统计时发现,指定条件查询统计时有可能返回空值(Null),导致对应字段显示为空白,正常应显示为0.基本思路是在获取记录 ...

  8. ECMAScript 6教程 (二) 对象和函数

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文连接,博客地址为 http://www.cnblogs.com/jasonnode/ .该系列课程是 ...

  9. 一面cvte

    昨天上午去cvte参加一面,和好基友一块,离学校很近,10点多一点到了,一出电梯,傻眼了(不是美女很多),是人真的很多,等了2个小时才轮到我们,一个hr面3个人,我和基友,还有一个本科小盆友,问了5个 ...

  10. yield return的作用

    测试1: using UnityEngine; using System.Collections; public class test1 : MonoBehaviour { // Use this f ...