Sqlite 版本升级设计 第二版
发布时间:2020-12-12 19:57:37 所属栏目:百科 来源:网络整理
导读:/** * @author liulp */public class MySqlite extends SQLiteOpenHelper { private volatile SQLiteDatabase db; //建表语句 此部分只是用户第一次安装的时候会在oncreate方法中调用 //请注意CREATE部分不要做任何修改 所有的数据库修改都应该在 update_sql
/** * @author liulp */ public class MySqlite extends SQLiteOpenHelper { private volatile SQLiteDatabase db; //建表语句 此部分只是用户第一次安装的时候会在oncreate方法中调用 //请注意CREATE部分不要做任何修改 所有的数据库修改都应该在 update_sql中进行 String CREATE[] = new String[] { "create table " + TB_USER + " (tid integer primary key,name varchar(50));","Create table " + TB_USER_REPORT + "( tid integer primary key,uid integer,score integer);",}; //升级部分的 private static UpDateGrades[] updategrades = new UpDateGrades[] { new UpDateGrades() { @Override public void doupDateGrade(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("create table " + TB_USER_REPORT + " (tid integer primary key,uid interger,score interger);"); } },}; private static final String DBNAME = "popo"; // public static final String TB_USER = "user"; public static final String TB_USER_REPORT = "user_report"; String TAG = "SQLITE"; private static volatile MySqlite mySqlite = null; private MySqlite(Context context) { super(context,DBNAME,null,updategrades.length + 1); Log.v("MySqlite"," version=" + updategrades.length + 1); db = getWritableDatabase(); updategrades = null; CREATE = null; } public static MySqlite instance(Context context) { if (mySqlite == null) { synchronized (MySqlite.class) { if (mySqlite == null) mySqlite = new MySqlite(context); } } return mySqlite; } public SQLiteDatabase getSQLiteDatabase() { if (db == null) { synchronized (this) { if (db == null) db = getWritableDatabase(); } } else { if (db.isOpen() == false) { synchronized (this) { if (db.isOpen() == false) { db = null; db = getWritableDatabase(); } } } } return db; } /** * 执行创建 数据库语句 */ @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.v(TAG,"MyDBHelper onCreate"); for (String sql : CREATE) { db.execSQL(sql); } } //执行升级语句 @Override public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) { // TODO Auto-generated method stub Log.v(" Version","oldVersion=" + oldVersion + ",newVersion=" + newVersion); for (int i = oldVersion; i < newVersion; i++) { updategrades[i - 1].doupDateGrade(db); } } //升级语句接口 interface UpDateGrades { void doupDateGrade(SQLiteDatabase db); }; }
主要修改时把升级操作改成了一个借口方法,这样可以实现更复杂的需求分析,并且多个修改语句可以在一个方法中执行,版本号可以和我们发布的App版本比较更贴近。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |