文档章节

Android SQLiteOpenHelper 数据库升级

老牟
 老牟
发布于 2015/05/09 10:09
字数 375
阅读 68
收藏 0

在应用开发时,可能随着需求或者其他因素,原设计的数据字段不够了需要重新新增或者删除字段,又或者创建新的表,这时我们该怎么做呢?

下面来看一个例子, 这是我们第一版开发的数据库,

package com.laomou.demo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SQLTest extends SQLiteOpenHelper {
	private static String DB_NAME = "people";
	private static int VERSION = 1;

	public SQLH(Context context) {
		super(context, DB_NAME, null, VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		StringBuilder sql = new StringBuilder();
		sql.append("CREATE TABLE people");
		sql.append("(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age TEXT);");
		db.execSQL(sql.toString());
	}

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

}

表结构如下

随着需求或者其他因素,可能需要添加新字段,这是我们第二版开发的数据库,

package com.laomou.demo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SQLH extends SQLiteOpenHelper {
	private static String DB_NAME = "people";
	private static int VERSION = 2;

	public SQLH(Context context) {
		super(context, DB_NAME, null, VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		StringBuilder sql = new StringBuilder();
		sql.append("CREATE TABLE people");
		sql.append("(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age TEXT);");
		db.execSQL(sql.toString());
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		int upgradeVersion = oldVersion;
		if (1 == upgradeVersion) {
			StringBuilder sql = new StringBuilder();
			sql.append("ALTER TABLE people ");
			sql.append("add class TEXT");
			db.execSQL(sql.toString());
			upgradeVersion = 2;
		}
		if (upgradeVersion != newVersion) {
			// Drop tables
			db.execSQL("DROP TABLE IF EXISTS people");
			// Create tables
			onCreate(db);
		}
	}

}

表结构如下

再来看是如何做到升级数据库,添加字段的

更改数据库的版本

private static int VERSION = 2;

实现了onUpgrade方法

int upgradeVersion = oldVersion;
if (1 == upgradeVersion) {
    StringBuilder sql = new StringBuilder();
    sql.append("ALTER TABLE people ");
    sql.append("add class TEXT");
    db.execSQL(sql.toString());
    upgradeVersion = 2;
}
if (upgradeVersion != newVersion) {
    // Drop tables
    db.execSQL("DROP TABLE IF EXISTS people");
    // Create tables
    onCreate(db);
}


© 著作权归作者所有

共有 人打赏支持
老牟
粉丝 14
博文 20
码字总数 8401
作品 0
成都
程序员
私信 提问
IT蓝豹强烈推荐:符合1-2年工作经验,开发中的难点及相关优化:

IT蓝豹强烈推荐:符合1-2年工作经验,开发中的难点及相关优化: IT蓝豹 ------------------> sqlite数据库版本升级 1.sqlite升级步骤: 1.自己写一个类继承自SqliteOpenHelper 2.会实现Sqlit...

抉择很难
2015/10/29
0
0
Android创建和使用数据库详细指南(1)

数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简单的数据,那么就需要一个数据库系统存储你的结构化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的S...

冯京宝
2011/01/23
0
0
android SQLite使用SQLiteOpenHelper类对数据库进行操作

一、 SQLite介绍 SQLite是android内置的一个很小的关系型数据库。 SQLite的官网是http://www.sqlite.org/,可以去下载一些文档或相关信息。 博客中有一篇有稍微详细一点的介绍,大家可以去看...

hosealee
2013/06/08
0
0
Android_6.数据存储3_SQLite存储之创建数据库

本文是以Android Studio为开发工具,<> 为学习指导书籍的学习记录 6.4 SQLite数据 SQLite用于存储大量复杂的关系型数据,是内置在Android系统的一种轻量级的关系型数据库,它有速度快,占用资...

橄榄工作室
05/26
0
0
详解Android数据存储技术

前言 学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的。我们聊QQ,聊微信,看新闻,刷朋...

达叔小生
08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

windows下让 jar 在后台运行的办法

windows下 运行 java jar 不出现 命令行 窗口 新建一个披处理 run.bat,内容如下 @echo off start javaw -jar xx.jar exit 双击运行即可。...

glen_xu
17分钟前
1
0
jdk1.8 lambda stream 指定的对象属性进行去重

原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。 解决方案: //去重,共同信息保存到bizPledgeSupplierVOs里bizPledgeSupp...

INSISTQIAO
20分钟前
0
0
vue nextTick深入理解---vue性能优化、DOM更新时机、事件循环机制

定义[nextTick、事件循环] nextTick的由来: 由于vue的数据驱动视图更新是异步的,即修改数据的当下,视图不会立即更新,而是等同一事件循环中的所有数据变化完成之后再统一进行视图更新。...

JamesView
28分钟前
2
0
常用汉字编码

GB2312 仅包含大部分的常用简体汉字,但已经不能适应现在的需要; GB13000 由于GB2312的局限性,国家标准化委员会制定了GB13000编码; 但由于当时的硬件和软件都已经支持了GB2312,而GB13000...

晨猫
30分钟前
4
0
纳尼?我的Gradle build编译只要1s

https://juejin.im/post/5c00ec39e51d4555ec0394f6

SuShine
31分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部