android数据库创建,升级,降级什么时候执行

最近做应用,遇到一个有关android数据库的问题,一直是建一个表占一个数据库,虽然看着好找,可发现既麻烦还代码多,于是查找有什么优化的方法,了解到数据库的创建,升级,降级什么时候执行的问题:

SQLiteOpenHelper里的onCreate执行:

1.只在数据库还没有建立时运行一次.如果数据库已经存在了,就不再执行onCreate方法,即在第一次打开数据库的时候才会执行

2.在清除数据之后再次运行-->打开数据库,这个方法会执行

3.没有清除数据,不会执行这个方法

4.数据库升级的时候这个方法不会执行,想执行需要先删除数据,再调用onCreate方法

onCreate里可以建多张表,并为每张表插入数据,为此解决了我原先一张表一个数据库的繁琐。

部分代码如下:

 1      StringBuilder sbCategory1 = new StringBuilder();
 2         sbCategory1.append("create table if not exists ");
 3         sbCategory1.append(NEWS_CATEGORY_TBL_COUNTRYS);
 4         sbCategory1.append("(");
 5         sbCategory1.append(NEWS_CATEGORY_TBL_COUNTRYID).append(" Integer primary key autoincrement,");
 6         sbCategory1.append(NEWS_CATEGORY_TBL_COUNTRYNAME).append(" varchar(20)");
 7         sbCategory1.append(")");
 8         
 9         db.execSQL(sbCategory1.toString());
10         
11         //在库中插入默认数据
12         List<Countrys> countryList = AreaManagerDao.getCountrysList();
13                 for(Countrys item : countryList){
14                     ContentValues values = new ContentValues();
15                     values.put(NEWS_CATEGORY_TBL_COUNTRYID, item.getCountryId());
16                     values.put(NEWS_CATEGORY_TBL_COUNTRYNAME, item.getCountryName());
17                     db.insert(NEWS_CATEGORY_TBL_COUNTRYS, null, values);
18                 }
19         //********************************
20         StringBuilder sbCategory2 = new StringBuilder();
21         sbCategory2.append("create table if not exists ");
22         sbCategory2.append(NEWS_CATEGORY_TBL_PROVINCES);
23         sbCategory2.append("(");
24         sbCategory2.append(NEWS_CATEGORY_TBL_PROVINCEID).append(" Integer primary key autoincrement,");
25         sbCategory2.append(NEWS_CATEGORY_TBL_COUNTRYID).append(" Integer,");
26         sbCategory2.append(NEWS_CATEGORY_TBL_PROVINCENAME).append(" varchar(20)");
27         sbCategory2.append(")");
28         
29         db.execSQL(sbCategory2.toString());
30         
31         //在库中插入默认数据
32         List<Provinces> provincesList = AreaManagerDao.getProvincesList();
33                 for(Provinces item : provincesList){
34                     ContentValues values = new ContentValues();
35                     values.put(NEWS_CATEGORY_TBL_PROVINCEID, item.getProvinceId());
36                     values.put(NEWS_CATEGORY_TBL_COUNTRYID, item.getCountryId());
37                     values.put(NEWS_CATEGORY_TBL_PROVINCENAME, item.getProvinceName());
38                     db.insert(NEWS_CATEGORY_TBL_PROVINCES, null, values);
39                 }

onUpgrade的执行:

1.第一次创建数据库的时候,这个方法不会执行

2.清除数据后再次运行(相当于第一次创建)这个方法不会执行

3.数据库已经存在,而且版本升高的时候,这个方法才会调用,但不会自动执行onCreate

代码如下:

 1 /**
 2        * onUpgrade当版本号不一致时,执行
 3        */
 4     @Override
 5     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
 6           db.execSQL( "DROP TABLE IF EXISTS " + NEWS_CATEGORY_TBL_GUODOURECIPE );
 7           db.execSQL( "DROP TABLE IF EXISTS " + NEWS_CATEGORY_TBL_COUNTRYS );
 8           db.execSQL( "DROP TABLE IF EXISTS " + NEWS_CATEGORY_TBL_PROVINCES );
 9           db.execSQL( "DROP TABLE IF EXISTS " + NEWS_CATEGORY_TBL_CITYS );
10           onCreate(db);        
11     }

onDowngrade的执行:

1.执行数据库的降级操作
2.只有新版本比旧版本低的时候才会执行
3.如果不执行降级操作,会抛出异常








原文地址:https://www.cnblogs.com/jiuqing/p/4046033.html