sqliteDataBase的升级其实只涉及到创建数据库的那个类,
下面给出一个类的代码做范例然后做简单讲解
package com.example.pei.textdemo.sqlite_object;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Title:
* Description:
* <p>
* Created by pei
* Date: 2017/11/22
*/
public class ObjectOpenHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "save_object.db";//数据库文件名
private static SQLiteDatabase INSTANCE;
private Context mContext;
private static final String CREATE_DB= "CREATE TABLE IF NOT EXISTS person(_id integer NOT NULL PRIMARY KEY AUTOINCREMENT,\n" +
" data BLOB);";
public SQLiteDatabase getInstance() {
if (INSTANCE == null) {
INSTANCE = new ObjectOpenHelper(mContext).getWritableDatabase();
}
return INSTANCE;
}
public ObjectOpenHelper(Context context) {
this(context, DB_NAME, null, 1);
this.mContext=context;
}
public ObjectOpenHelper(Context context, String dbName, SQLiteDatabase.CursorFactory factory, int version) {
super(context, dbName, factory, version);
}
//首次创建数据库时调用,一般进行建库建表操作
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
db.execSQL(CREATE_DB);
}
//当数据库的版本发生变化的时候会自动执行,禁止人为调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion){
case 1:
//创建表
db.execSQL(CREATE_DB);
case 2:
default:
}
}
}
sqlite数据库一般升级的话只涉及到onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法,在这个方法中实现升级时比较粗暴的方法是先删除旧表,然后重建新表,但是这样会很不友好,比较好的处理是用switch做分类处理,注意case中没有break,这样就能保证每个版本功能的顺序执行。
ok,sqlite升级就讲到这里了,谢谢。
网友评论