Android五大存储方式之数据库升级篇
2016-11-05 09:26
197 查看
前面我已经讲解了数据库的基本操作,如果还没观看的可以稍微看下:
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,进入正题代码:
以上根据需求讲解数据库的升级过程,过程就是如此So Easy,还不会的伙伴赶快敲起来
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,还不会的伙伴赶快敲起来
相关文章推荐
- Android开发之五大存储方式之一数据库存储
- (转)【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android------五大存储方式详解
- Android中的五大数据存储方式之一——文件存储
- Android五大存储方式——详解SharedPreferences
- Android五大数据存储方式
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- android应用开发存储方式之SQLite(android自带的数据库)的一些个人理解
- Android五大存储方式之File文件存储
- Android 五大存储方式具体解释
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- android的五大存储方式
- Android中的五大存储方式之二——SQLite数据库
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android数据保存的3种方式 SharedPreferences存储、文件存储、数据库存储SQLite 未完
- Android数据存储方式之:数据库操作
- android 数据存储的五大方式(转)
- android五大基本存储方式
- Android五大存储方式之四——ContentProvider