前面我已经讲解了数据库的基本操作,如果还没观看的可以稍微看下:
http://blog.csdn.net/qq_33750826/article/details/53036695
1.首先简单说下SQLiteOpenHelper类, 顾名思义就是一个SQL的帮助类,帮助我们管理Android数据库的,继承它需要实现**void onCreate(SQLiteDatabase db)与void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)**两个方法,一个用于新建,一个用于升级,当然还必须重写其的一个构造方法,构造方法参数的含义上面这篇博客中我已经解释了,这里不再重复,需要的朋友可以去上面的地址查看
2.SQLiteDatabase类:这个类用于操作数据库增删改查,具体的增删改查我在上面博客已经提到,需要的朋友可以去上面的地址查看
3,进入正题代码:
**3.1,创建一个类继承自SQLiteOpenHelper,第一版的数据库**
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table Book("
+ "id integer primary key autoincrement," + "author text,"
+ "price real," + "pages integer," + "name text)";
public MyDatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}
**3.2,新需求:向数据库中添加一张Category表
添加表,数据库已经要发生改变了,所以这里就涉及到了数据库升级操作**
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
* 第二版的数据库
* @author wt
*
*/
public class MyDatabaseHelperVersion2 extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table Book("
+ "id integer primary key autoincrement," + "author text,"
+ "price real," + "pages integer," + "name text)";
public static final String CREATE_CATEGORY = "create table Category("
+ "id integer primary key autoincrement," + "category_name text,"
+ "category_code integer)";
public MyDatabaseHelperVersion2(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
/*
* 当用户是直接安装第二版的程序时,就会将两张表一起创建,
* 而当用户是使用的第二版的程序覆盖第一版的程序时,就会进入到升级数据的操作中
*
*/
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
//如果当前用户数据库的版本号为1,就只会创建一张Category表
case 1:
db.execSQL(CREATE_CATEGORY);
break;
default:
break;
}
}
}
3.3:再次升级,新需求: 这次要给Book表和Category表之间建立关联,需要在Book表中添加一个category_id的字段
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
* 2新需求:
* 这次要给Book表和Category表之间建立关联,
* 需要在Book表中添加一个category_id的字段
* @author wt
*
*/
public class MyDatabaseHelperVersion3 extends SQLiteOpenHelper {
/**
*首先我们在Book表语句中添加了一个category_id列,
*这样当用户直接安装第三版程序时,这个新增的列就已经自动添加成功了
*/
public static final String CREATE_BOOK = "create table Book("
+ "id integer primary key autoincrement," + "author text,"
+ "price real," + "pages integer," + "name text"+"category_id integer)";
public static final String CREATE_CATEGORY = "create table Category("
+ "id integer primary key autoincrement," + "category_name text,"
+ "category_code integer)";
public MyDatabaseHelperVersion3(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
/*
* 当用户是直接安装第二版的程序时,就会将两张表一起创建,
* 而当用户是使用的第二版的程序覆盖第一版的程序时,就会进入到升级数据的操作中
*
*/
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);
}
/**
* 然而,如果用户之前就已经安装了某一版本的程序,现在需要
* 覆盖安装,就会进入到升级数据库的操作中,在onUpgrade()
* 方法里,我们添加了一个新的case,如果当前数据库的版本号是2,
* 就会执行alter命令来为Book表新增category_id列
*
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
/**
* 注意:这里的case语句是没有break的,为什么这样做呢?
* 这是为了在版本升级的时候,每一次的数据库修改都能被全部执行到
* 使用这种方式升级数据库,不管怎样更新,都可以保证
* 数据库中的表结构是最新的,而且表中的数据也完成不会丢失了
*/
case 1:
db.execSQL(CREATE_CATEGORY);
case 2:
db.execSQL("alter table Book add column category_id integer");
default:
}
}
}
以上根据需求讲解数据库的升级过程,过程就是如此So Easy,还不会的伙伴赶快敲起来