之前一直不知道这个东西是干什么的,数据库的版本号也是随便定义的,还有两个版本号。 
Android在设计时,就考虑到了数据库的更新。当检测到版本有变化时,就会对数据库更新,执行这个操作。 

所以定义数据库的版本还是比较重要的,如第一个程序版本时定义的数据库版本为1,在程序发布新版时有对数据库更新操作,可能增加表,增加列,如果没有调整这个版本,数据库不会创建新的表,也不会添加新的列,安装新版的程序就会崩溃了。 

查了一些资料终于明白了。 
ContactsDatabaseHelper这个是系统 联系人的源码中的一个类,里面已经定义了版本为353, 
@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}在这个方法里处理了更新 

大概代码是这样的 
Java代码 
1. if (oldVersion < 99) {直接删除所有的表,重建,有可能是变化太大的问题吧。}  
2.   
3. if (oldVersion == 100) {  
4. CREATE INDEX创建一个新的索引  
5. oldVersion++;增加旧版本号,  
6. }  
7. 。。。之后多个操作,依次增加版本号。  
8.   
9. if (oldVersion == 105) {  
10.             upgradeToVersion202(db);//直接增加到202  
11.             oldVersion = 202;  
12.         }  
13.   
14. 对于数据库的版本号还要严格地处理。  
15. 这里 对oldVersion操作完成后需要与newVersion一样,才算升级成功。  
16. if (oldVersion != newVersion) {  
17. throw new IllegalStateException(  
18.          "error upgrading the database to version " + newVersion);  
19. } //当然这不是强制要求的,  
20. upgrade就结束了。  
21. 这样数据库版本号就是newVersion,如果下一次要升级,就至少要比这个高才会触发。  

也许有人会问,如果当前的表的存了数据,程序又不愿重新安装,更新数据库时要保留原来的数据怎么办呢? 
以上的版本升级是必然要做的事,但是没有提到数据更新的问题。 
如果不是删除原来的表格,只是增加了一列,可能会要求对这列赋默认的值 

Java代码 
1. 上面有一个跨度较大的就是100多到202的升级:  
2. upgradeToVersion202(SQLiteDatabase db)看这个方法:  
3. db.execSQL(  
4.                 "ALTER TABLE " + Tables.PHONE_LOOKUP +  
5.                 " ADD " + PhoneLookupColumns.MIN_MATCH + " TEXT;");  
6. 增加了一列。  
7.   
8. SQLiteStatement update = db.compileStatement(  
9.                 "UPDATE " + Tables.PHONE_LOOKUP +  
10.                 " SET " + PhoneLookupColumns.MIN_MATCH + "=?" +  
11.                 " WHERE " + PhoneLookupColumns.DATA_ID + "=?");  
12. 创建更新语句。  
13.   
14. Cursor c = db.query(Tables.PHONE_LOOKUP + " JOIN " + Tables.DATA +  
15.                 " ON (" + PhoneLookupColumns.DATA_ID + "=" + DataColumns.CONCRETE_ID + ")",  
16.                 new String[]{Data._ID, Phone.NUMBER}, null, null, null, null, null);  
17. 处理新的列。  
18.   
19. 更新数据。  
20. try {  
21.             while (c.moveToNext()) {  
22.                 long dataId = c.getLong(0);  
23.                 String number = c.getString(1);  
24.                 if (!TextUtils.isEmpty(number)) {  
25.                     update.bindString(1, PhoneNumberUtils.toCallerIDMinMatch(number));  
26.                     update.bindLong(2, dataId);  
27.                     update.execute();  
28.                 }  
29.             }  
30.         } finally {  
31.             c.close();  
32.         }  
33. 这就是处理数据更新的过程。