`
phenom
  • 浏览: 406147 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Android 数据库更新 onupgrade

 
阅读更多
之前一直不知道这个东西是干什么的,数据库的版本号也是随便定义的,还有两个版本号。
Android在设计时,就考虑到了数据库的更新。当检测到版本有变化时,就会对数据库更新,执行这个操作。

所以定义数据库的版本还是比较重要的,如第一个程序版本时定义的数据库版本为1,在程序发布新版时有对数据库更新操作,可能增加表,增加列,如果没有调整这个版本,数据库不会创建新的表,也不会添加新的列,安装新版的程序就会崩溃了。

查了一些资料终于明白了。
ContactsDatabaseHelper这个是系统 联系人的源码中的一个类,里面已经定义了版本为353,
@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}在这个方法里处理了更新

大概代码是这样的
Java代码
‪1.‬if (oldVersion < 99) {直接删除所有的表,重建,有可能是变化太大的问题吧。} 
‪2.‬ 
‪3.‬if (oldVersion == 100) { 
‪4.‬CREATE INDEX创建一个新的索引 
‪5.‬oldVersion++;增加旧版本号, 
‪6.‬} 
‪7.‬。。。之后多个操作,依次增加版本号。 
‪8.‬ 
‪9.‬if (oldVersion == 105) { 
‪10.‬            upgradeToVersion202(db);//直接增加到202 
‪11.‬            oldVersion = 202; 
‪12.‬        } 
‪13.‬ 
‪14.‬对于数据库的版本号还要严格地处理。 
‪15.‬这里 对oldVersion操作完成后需要与newVersion一样,才算升级成功。 
‪16.‬if (oldVersion != newVersion) { 
‪17.‬throw new IllegalStateException( 
‪18.‬         "error upgrading the database to version " + newVersion); 
‪19.‬} //当然这不是强制要求的, 
‪20.‬upgrade就结束了。 
‪21.‬这样数据库版本号就是newVersion,如果下一次要升级,就至少要比这个高才会触发。 

也许有人会问,如果当前的表的存了数据,程序又不愿重新安装,更新数据库时要保留原来的数据怎么办呢?
以上的版本升级是必然要做的事,但是没有提到数据更新的问题。
如果不是删除原来的表格,只是增加了一列,可能会要求对这列赋默认的值

Java代码
‪1.‬上面有一个跨度较大的就是100多到202的升级: 
‪2.‬upgradeToVersion202(SQLiteDatabase db)看这个方法: 
‪3.‬db.execSQL( 
‪4.‬                "ALTER TABLE " + Tables.PHONE_LOOKUP + 
‪5.‬                " ADD " + PhoneLookupColumns.MIN_MATCH + " TEXT;"); 
‪6.‬增加了一列。 
‪7.‬ 
‪8.‬SQLiteStatement update = db.compileStatement( 
‪9.‬                "UPDATE " + Tables.PHONE_LOOKUP + 
‪10.‬                " SET " + PhoneLookupColumns.MIN_MATCH + "=?" + 
‪11.‬                " WHERE " + PhoneLookupColumns.DATA_ID + "=?"); 
‪12.‬创建更新语句。 
‪13.‬ 
‪14.‬Cursor c = db.query(Tables.PHONE_LOOKUP + " JOIN " + Tables.DATA + 
‪15.‬                " ON (" + PhoneLookupColumns.DATA_ID + "=" + DataColumns.CONCRETE_ID + ")", 
‪16.‬                new String[]{Data._ID, Phone.NUMBER}, null, null, null, null, null); 
‪17.‬处理新的列。 
‪18.‬ 
‪19.‬更新数据。 
‪20.‬try { 
‪21.‬            while (c.moveToNext()) { 
‪22.‬                long dataId = c.getLong(0); 
‪23.‬                String number = c.getString(1); 
‪24.‬                if (!TextUtils.isEmpty(number)) { 
‪25.‬                    update.bindString(1, PhoneNumberUtils.toCallerIDMinMatch(number)); 
‪26.‬                    update.bindLong(2, dataId); 
‪27.‬                    update.execute(); 
‪28.‬                } 
‪29.‬            } 
‪30.‬        } finally { 
‪31.‬            c.close(); 
‪32.‬        } 
‪33.‬这就是处理数据更新的过程。 

博客文章列表居然发现三个,删除一个就全没了。这次格式乱了
分享到:
评论
2 楼 hold_on 2013-05-27  
  
1 楼 yangz_op 2013-02-19  
  

相关推荐

    使用android快速开发框架afinal的FinalDb操作android数据库

    afinal是一个android的orm、ioc... afinal的FinalDb组件是android的一个轻量级的orm框架,使用简单,一行代码就可以完成数据库的各种操作功能。 文章地址:http://blog.csdn.net/michael_yy/article/details/8154860

    Android数据库实验.docx

    Android数据库实验全文共7页,当前为第1页。Android数据库实验全文共7页,当前为第1页。实验报告 Android数据库实验全文共7页,当前为第1页。 Android数据库实验全文共7页,当前为第1页。 实验项目:Android数据库...

    Android 使用SQLite数据库

    android数据库使用真的很不错 SQLiteOpenHelper 创建数据库和数据库版本管理的辅助类。这是一个抽象类,所以我们一般都有一个SQLiteOpenHelper子类,需要继承实现 • void onCreate(SQLiteDatabase db) 在数据库第...

    在android studio中用SQLiteOpenHelper()方法建立数据库

    在android studio中存储数据有三个方法,分别是: (1)简单存储——SharedPreferences (2)文件存储: 内部存储——应用程序私有文件 ...onUpgrade( ):利用SQL语句,在系统中升级数据库(表)功能 注: onCreat

    android 数据库 小应用

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table datas if exits"); onCreate(db); } public Cursor ExitsData() { SQLiteDatabase db = ...

    android数据库

    private static class DBOpenHelper ... public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { // 更新数据库 _db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); onCreate(_db); } }

    安卓Android sqlite万能数据库

    每次使用数据库都会有繁琐的代码要写,大致思路是继承自SQLiteOpenHelper写一个数据库操作子类,然后重写onCreate方法,写上数据库的建表语句,重写onUpgrade方法,写上数据库的升级执行代码,此外还有繁琐的 增、删...

    Android数据库升级实例

     Andoird的SQLiteOpenHelper类中有一个onUpgrade方法。帮助文档中只是说当数据库升级时该方法被触发。经过实践,解决了我一连串的疑问:  1. 帮助文档里说的“数据库升级”是指什么?  你开发了一个程序,当前...

    android studio使用SQLiteOpenHelper()建立数据库的方法

    在android studio中存储数据有三个方法,分别是: (1)简单存储——SharedPreferences (2)文件存储:内部存储——应用程序私有文件外部...onUpgrade( ):利用SQL语句,在系统中升级数据库(表)功能 注: onCreate

    android连接SQLite数据库源代码

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 存在这个表的话就把它删除, db.execSQL("DROP TABLE IF EXISTS person"); System.out.println("update a Database"); } }

    android SQLite数据库总结

    SQLite SQLite是一种超轻量级的嵌入式数据库,大小...onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等 常用方法 getReadableDatabase() 获取SQLiteDatabase对象,操作数据库 getWritableDatabase() 

    Android-SQLiteMergerHelper:在 Android 上迁移 SQLite 数据库

    版本1.0.0在项目中添加在您的项目中添加SQLiteMergerHelper.java类在项目资产中创建 dbscript.txt开始使用首先转到您的 SQLiteOpenHelper 并更新 onUpgrade 方法@Override public void onUpgrade(final ...

    Android数据持久化之SQLite数据库用法分析

    1、SQLiteOpenHelper:创建数据库和数据库版本管理的辅助类,该类是一个抽象类,所以我们一般都有一个子类SQLiteOpenHelper,需要继承实现的方法主要有onCreate()、onUpgrade()、getWritableDatabase()等。...

    android上使用Sqlite的一个小demo

    这个Android小Demo展示了如何在Android应用程序中使用SQLite数据库。SQLite是一个开源的嵌入式关系型数据库,它的体积小、使用简单、跨平台,非常适合应用于移动设备等资源受限的环境中。Android系统从一开始就内置了...

    Android项目设计与开发:SQLite 1.ppt

    SQLite SQLiteOpenHelper 有两个抽象方法,分别是onCreate和onUpgrade,他们分别是数据库创建和数据库版本升级的回调方法 。 实验 通过SQLiteOpenHelper创建属于项目的数据库 谢谢 请专家批评指正!

    personal.android-db:示例 android studio 应用程序,它具有我制作的某种数据库框架

    安卓数据库这是一个简单的 android 应用程序,它在一个可扩展的(ish?)数据库框架中存储名称。应用程序做什么使用此应用程序,您可以: 通过按操作栏上的添加按钮创建和插入名称到数据库通过单击更新名称长按删除...

    Android SQLite数据库版本升级的管理实现

    Android SQLite数据库版本升级的管理实现 我们知道在SQLiteOpenHelper的构造方法: super(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 中最后一个参数表示数据库的版本号....

    Android SQLite数据库版本升级原理解析

    Android使用SQLite数据库保存数据,那数据库版本升级是怎么回事呢,这里说一下。  一、软件v1.0  安装v1.0,假设v1.0版本只有一个account表,这时走继承SQLiteOpenHelper的onCreate,不走onUpgrade。  1、v1.0...

    Android Studio中用SQLiteOpenHelper()方法创建数据库中的表结构

    在android studio中用SQLiteOpenHelper()方法建立数据库 注:这篇文章是承接上面发的链接的文章,有什么问题欢迎讨论 用SQLiteOpenHelper()方法创建表结构可以用onCreat()函数和onUpgrade()函数 一.用...

Global site tag (gtag.js) - Google Analytics