很久以前设计的数据库创建与升级的方法,此设计避免了升级的时候需要多处修改的弊端。 代码如下:
publicclassDBAdatper{
privateDBHelperdbHelper;privateSQLiteDatabase_db;privatefinalContextcontext;publicDBAdatper(Contextcontext){super();this.context=context;dbHelper=newDBHelper(context,DATABASE_NAME,null,DB_VERSION);_db=dbHelper.getWritableDatabase();}//数据库名privatestaticfinalStringDATABASE_NAME="test";//建表语句此部分只是用户第一次安装的时候会在oncreate方法中调用//请注意CREATE部分不要做任何修改所有的数据库修改都应该在update_sql中进行privatestaticfinalStringCREATE[]=newString[]{"createtabletype(tidintegerprimarykey,namevarchar(50));",};//数据库更新升级,此部分会在onupdate方法中调用//请注意所有的数据库结构的修改操作都要在此处进行否则会出现升级混乱的问题privatestaticString[]UPDATE=newString[]{};//当前数据库版本请保证DB_VERSION的值等于update_sql.length+1privatestaticfinalintDB_VERSION=UPDATE.length+1;/***数据库创建对象**@authorpopo**/privatestaticclassDBHelperextendsSQLiteOpenHelper{publicDBHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){
super(context,name,factory,version);//TODOAuto-generatedconstructorstub}@OverridepublicvoidonCreate(SQLiteDatabasedb){//TODOAuto-generatedmethodstub//创建表结构intsql_numbers=CREATE.length;//执行建表语句for(inti=0;i<sql_numbers;i++){try{db.execSQL(CREATE[i]);}catch(Exceptione){//TODO:handleexception}}//执行升级部分保证新装用户也可以执行到升级部分onUpgrade(db,1,DB_VERSION);}/***数据库升级部分*/@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){//TODOAuto-generatedmethodstubintversion=newVersion-1;//由于数组的长度是从0开始的而数据库版本是从一开始所以i=oldVersion-1for(inti=oldVersion-1;i<version;i++){try{db.execSQL(UPDATE[i]);}catch(Exceptione){//TODO:handleexception}}}}
}
这样数据库升级只在UPDATE数组中添加需要升级的SQL语句就可以了 ,不需要修改 DB_VERSION 不需要 修改 oncreate , onUpgrade 。
有什么不妥之处,望指正!