`
phenom
  • 浏览: 409361 次
  • 性别: 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 数据库表结构更新步骤

    下面将详细讲解如何在Android中进行数据库表结构的更新,以及如何处理旧版本程序中表的接口添加、删减字段的问题。 1. **创建SQLite数据库** - Android使用SQLite作为默认的本地数据库系统。首先,我们需要创建一...

    Android数据库SQLite详解

    - **onUpgrade()**: 当数据库版本升级时调用,用于更新或删除旧表。 ### 3. CRUD操作 - **创建(CREATE)**: 使用SQL语句`CREATE TABLE`创建新表,例如:`CREATE TABLE IF NOT EXISTS TableName (Column1 DataType, ...

    android数据库操作封装

    "android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...

    android数据库应用实例

    下面我们将深入讨论Android数据库应用的相关知识点。 1. SQLite数据库介绍 SQLite是一个开源的数据库系统,它被集成到Android操作系统中,无需额外安装任何软件。它的优点包括小巧、快速、可靠,以及支持SQL标准,...

    android 数据库代码和资料

    本资源包提供了完整的Android数据库代码示例和详细的讲解资料,非常适合开发者深入学习和理解Android数据库的使用。 首先,我们来了解一下Android中主要使用的数据库系统——SQLite。SQLite是一个轻量级、嵌入式的...

    Android数据库示例源码

    这个“Android数据库示例源码”很可能是为了展示如何在Android平台上使用SQLite数据库进行数据操作。SQLite是一种轻量级、开源的SQL数据库,它嵌入到Android系统中,为每个应用程序提供独立的数据库。 首先,让我们...

    Android数据库完美框架和示例

    在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。

    Android 完成数据库的升级,给旧表中添加字段并保持原有数据

    2. `onUpgrade()`方法:当数据库版本升级时调用,用于更新表结构或执行其他必要的升级操作。 二、数据库版本管理 每个SQLite数据库都有一个版本号,可以在SQLiteOpenHelper的构造函数中设置。每次升级时,都需要...

    android数据库操作实例

    总结来说,这个"android数据库操作实例"涵盖了Android应用中使用SQLite数据库的基础知识,包括创建数据库、定义表结构、插入、查询、更新和删除数据等操作。通过学习这个实例,开发者可以更好地理解如何在Android...

    android 数据库升级方法

    综上所述,Android数据库升级是一个涉及版本管理、表结构修改和数据迁移的过程。通过合理地重写onUpgrade方法,我们可以确保应用程序在更新时能够顺利地适应新的数据库结构。同时,遵循最佳实践,可以提高升级的稳定...

    android数据库增删改查工具

    这个“android数据库增删改查工具”是一个自定义的解决方案,旨在简化Android应用程序中SQLite数据库的操作。开发者通常会遇到处理用户数据、成员信息等需求,这时一个方便的数据库管理工具就显得尤为重要。 首先,...

    android-sqlite.src.zip_Android 数据库_Android数据库_android_android sq

    首先,我们来谈谈Android数据库的基本概念。Android中的SQLite数据库通过SQLiteOpenHelper类进行操作。这个类提供了创建、升级和打开数据库的方法。开发者通常会继承SQLiteOpenHelper并重写onCreate()和onUpgrade()...

    Android课程试验报告-实现数据库存储.docx

    总结来说,本实验报告详细展示了在Android应用中如何使用SQLite数据库进行数据管理,包括数据库的创建、表的建立以及基本的CRUD(创建、读取、更新、删除)操作。通过DbHelper和DbManager类的设计,实现了数据操作的...

    Android数据库.zip

    《深入理解Android数据库:SQLite3实战指南》 在Android应用开发中,数据库是不可或缺的一部分,它主要用于存储和管理应用程序的数据。本资源包“Android数据库.zip”聚焦于Android平台上的SQLite3数据库,它是...

    Android数据库应用编程

    本文将深入探讨Android数据库应用编程的相关知识点,帮助开发者掌握如何有效地在Android应用中管理和操作数据。 ### SQLite数据库介绍 SQLite是一个开源、嵌入式、自包含的SQL数据库引擎,无需单独的服务器进程,...

    android 数据库的demo

    本示例"android 数据库的demo"将重点展示如何进行CRUD(创建、读取、更新和删除)操作。 首先,我们需要创建一个SQLite数据库。在Android中,我们通常通过继承`SQLiteOpenHelper`类来实现。这个类有两个关键的方法...

    android数据库开发

    ### Android数据库开发详解 #### 一、概述 在Android应用开发过程中,数据持久化是非常重要的一个环节。Android提供了多种方式来存储数据,包括文件存储、SharedPreferences、SQLite数据库以及网络存储等。其中,...

    android数据库开发经典

    ### Android数据库开发经典知识点 #### 一、SQLite简介与特性 SQLite是一款轻量级的关系型数据库,被广泛应用于各种嵌入式系统中,包括Android操作系统。由于其无需服务器进程、安装简便等特点,使得SQLite成为...

    database-lock.zip_Android 数据库_Android数据库_android_database-lock_安

    综上所述,Android数据库管理是一个多方面的任务,涉及数据库创建、操作、加密以及安全性增强。开发者应根据应用需求选择合适的加密方案,并遵循最佳实践以确保数据安全。NativeDemo项目提供了一个很好的起点,可以...

    Android数据库操作Demo

    `onUpgrade()`则在数据库升级时调用,用于更新表结构。 例如,创建一个名为`DbHelper`的类: ```java public class DbHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = ...

Global site tag (gtag.js) - Google Analytics