文档章节

Android SQLiteOpenHelper 数据库升级

老牟
 老牟
发布于 2015/05/09 10:09
字数 375
阅读 65
收藏 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);
}


© 著作权归作者所有

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

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

抉择很难
2015/10/29
0
0
android SQLite使用SQLiteOpenHelper类对数据库进行操作

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

hosealee
2013/06/08
0
0
Android创建和使用数据库详细指南(1)

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

冯京宝
2011/01/23
0
0
Android_6.数据存储3_SQLite存储之创建数据库

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

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

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

达叔小生
08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
9分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
10分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
26分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部