`

Android应用程序数据库版本升级

阅读更多
数据库实现方法中有必须继承两个方法:onCreate和onUpgrade,他们的调用过程如下:
1.如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后只会调用onCreate方法,在该方法中一般需要创建数据库中的表、视图等组件。在创建之前,数据库是空的,因此,不需要先删除数据库中相关的组件。
2.如果数据库文件存在,并且当前的版本号高于上次创建或升级时的版本号,SQLiteOpenHelper会调用onUpgrade方法,调用该方法后,会更新数据库版本号。在onUpgrade方法中除了创建表、视图等组件外,还需要首先删除这些相关的组件,因此,在调用onUpgrade方法之前,数据库是存在的,里面还有很多数据库组件。
3.综合上述两点,可以得出一个结论。如果数据库文件不存在,只有onCreate方法被调用(该方法只会在创建数据库时被调用1次)。如果数据库文件存在,并且当前版本较高,会调用onUpgrade方法来升级数据库,并更新版本号。

关于应用程序更新时版本号的升级,我引用别人的场景:
引用

我这里说的数据库版本指的是:我们的应用的程序的数据库的用户版本(user_version).比如说下面的情形:
2013年4月,我们第一次 发布了 我们的应用,数据库版本是1。
2013年5月,我们第二次 发布了 我们的应用,数据库版本是2。由于业务需要,我们更改了数据库里的某个表的表结构。
这时候就有这样的难题出现:
有些用户已经下载了4月份的版本1,并且已经使用了,很多数据存储在数据库了,这个时候,他想安装新的版本2,怎么办? 怎么才能让数据不丢失?
有的用户直接装了5月份的版本,那这些用户就直接使用了新的表结构格式。
可能以后还有版本3,4,N,怎么保证“数据不丢失的情况下“让用户手机里的数据库跟着升级?
------
我们记得SQLiteOpenHelper的onUpgrade方法,那么它是如何工作呢?我们该如何使用他?下面先说说使用它的方式。

解决方案:
我们在4月份数据库建立时,使用下面的方式
public class DatabaseHelper extends SQLiteOpenHelper {

	private static final String DB_NAME = "mydata.db"; // 数据库名称
	private static final int version = 1; // 数据库版本

	public DatabaseHelper(Context context) {
		super(context, DB_NAME, null, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "create table user(id integer primary key autoincrement , username varchar(20), password varchar(60));";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
	}
}


于是到了五月份,由于业务需要,我们想添加新的字段到这个表里。我们这样写代码:

public class DatabaseHelper extends SQLiteOpenHelper {

	private static final String DB_NAME = "mydata.db"; // 数据库名称
	private static final int version = 2; // 数据库版本

	public DatabaseHelper(Context context) {
		super(context, DB_NAME, null, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "create table user(id integer primary key autoincrement , username varchar(20), password varchar(60));";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		if (oldVersion == 1 && newVersion == 2) {
			// 从版本1到版本2时,增加了一个字段 desc
			String sql = "alter table [user] add [desc] nvarchar(300)";
			db.execSQL(sql);
		}
	}
}


如果数据库结构变化比较大,要做彻底的升级,怎么办?


public class DatabaseHelper extends SQLiteOpenHelper {

	private static final String DB_NAME = "mydata.db"; // 数据库名称
	private static final int version = 2; // 数据库版本

	public DatabaseHelper(Context context) {
		super(context, DB_NAME, null, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "create table user(id integer primary key autoincrement , username varchar(20), password varchar(60));";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//如果本次升级数据库完全变化很大,需要删除旧版本,建立新版本;
		if (oldVersion == 1 && newVersion == 2) {
			db.execSQL("drop table user;");
			//自动调用onCreate
		}
	}
}
分享到:
评论
2 楼 wenjiefeng 2014-03-06  
   
1 楼 qiye_520 2014-01-18  
有用,谢谢

相关推荐

    android 简单的数据库程序

    // 数据库版本号 private static final int DATABASE_VERSION = 1; // 数据库名 private static final String DATABASE_NAME = "testDb"; // 构造函数 public DatabaseHelper(Context context) { super...

    Android 应用数据库升级方法.docx

    在Android开发中,应用程序的数据存储往往依赖于SQLite数据库。随着应用的不断迭代和发展,数据库结构也需要随之进行调整与优化。这便涉及到了数据库版本控制的问题。当数据库结构发生变化时,如何确保新版本的应用...

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

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

    Android源码——数据库SQLite.zip

    这个类的子类通常会重写`onCreate()`和`onUpgrade()`方法,前者用于首次创建数据库时执行的初始化脚本,后者则在数据库版本升级时运行。 SQLite提供了SQL语言来操作数据,包括创建表(CREATE TABLE)、插入数据...

    android数据库应用实例

    综上所述,Android数据库应用实例主要涵盖了SQLite的使用、数据操作、数据库版本管理、性能优化等多个方面,通过实例代码MyDatabase,我们可以深入理解并掌握这些知识,为开发高效、可靠的Android应用程序奠定基础。

    Android高级应用源码-sqlite的一些基本操作,包括数据库创建、数据库版本升级、创建表、数据的增删改查.rar

    `onUpgrade()`则在数据库版本升级时调用,可以用来更新或重构数据库结构。 2. **数据库版本升级**: 数据库的版本管理是通过SQLiteOpenHelper的构造函数中的version参数实现的。每次修改数据库结构(如添加新表、...

    Android应用源码之sqlite的一些基本操作,包括数据库创建、数据库版本升级、创建表、数据的增删改查.zip

    本压缩包提供的源码涵盖了SQLite在Android中的基本操作,包括数据库创建、数据库版本升级、创建表以及数据的增删改查。下面将详细解释这些知识点。 1. **数据库创建**: 在Android中,每个应用程序都有自己的...

    android 数据库升级方法

    Android 数据库升级方法是应用程序在更新版本时,确保数据库结构与新版本应用需求相匹配的关键步骤。这个过程涉及到对数据库的版本管理、表结构的修改以及数据迁移。以下是关于如何在Android中进行数据库升级的详细...

    android demo,数据库操作的应用案例

    `onCreate()`在数据库首次创建时调用,`onUpgrade()`则在数据库版本升级时执行。 2. **SQL语句**: 在Android中,你可以直接编写SQL语句来创建表、插入数据、更新数据、删除数据以及查询数据。例如,创建一个表格的...

    Android SQLite内置数据库,以及SQLite版本管理

    本资源文件`sqlitetest`着重展示了如何在Android应用中使用SQLite进行数据操作,并且包含了数据库版本管理的实现。 1. **SQLite数据库的基本概念** - 数据库:SQLite数据库是存储在设备文件系统中的一个单一文件,...

    Android应用程序中使用自己的SQLite数据库

    在Android应用程序中使用自己的SQLite数据库是一项常见的需求,特别是在已有数据集或者希望预加载特定数据时。这个过程包括准备SQLite数据库文件、复制到应用的数据库路径以及在应用中打开和访问数据库。以下是一份...

    Android-一个Android帮助程序类用于使用应用的rawasset来管理数据库创建和版本管理

    开发者只需提供新的数据库版本和相应的升级脚本(如果有的话),库会自动执行这些脚本来更新数据库结构。 3. **跨版本兼容性**:`SQLite Asset Helper`确保在不同Android版本上都能正确处理数据库操作,避免了由于...

    android数据库Realm版本更新

    Realm数据库的核心特性之一是其自动版本管理,这使得在应用程序升级时可以方便地进行数据库迁移。 Realm通过内部维护一个版本号来跟踪数据库的变更。当你需要添加新的字段或更改现有模型时,就需要更新这个版本号,...

    基于android的个人日记本程序(Sqlite数据库).zip

    本项目“基于Android的个人日记本程序”是一个典型的应用实例,它利用SQLite数据库实现了日记的存储、查询、编辑和删除功能,展现了Android应用程序与数据库结合的强大能力。以下将对该项目的关键技术点进行详细阐述...

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

    Android SQLite数据库版本升级的管理实现是指在Android应用程序中实现数据库版本升级的管理,以便在数据库结构或数据格式发生变化时,能够正确地升级数据库版本。本文主要介绍了Android SQLite数据库版本升级的管理...

    Android数据库应用编程

    在Android平台上,数据库应用编程是构建数据驱动应用程序的关键部分。Android系统主要支持SQLite数据库,这是一种轻量级的关系...理解并熟练运用这些知识点,将有助于开发者构建出强大的、数据驱动的Android应用程序。

    Android应用源码之sqlite的一些基本操作,包括数据库创建、数据库版本升级、创建表、数据的增删改查.rar

    下面将详细介绍SQLite在Android应用中的基本操作,包括数据库创建、数据库版本升级、创建表以及数据的增删改查。 **数据库创建** 在Android中,我们通常通过SQLiteOpenHelper类来创建和管理SQLite数据库。首先,...

    Android实现查询数据库,把数据库内容显示到屏幕

    在`onCreate()`中,你可以编写SQL语句创建表,而在`onUpgrade()`中处理数据库版本升级。 例如: ```java public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = ...

Global site tag (gtag.js) - Google Analytics