源碼:http://download.csdn.net/detail/a924571572/9415506
一、框架效率對比



由於目前公司里面android端數據的數據量基本在千條以內,所以選擇了更為靈活方便的ORMLite作為項目中的數據庫模塊框架並且在ORMLite框架的基礎上對數據操作及后續的數據庫版本更新操作進行了封裝。
二、ORMLite ARUD封裝
1、工程項目結構


(1)bean:存放與數據表對應的實體類對象;
由用戶自己創建,在實體類中使用注解的形式與數據表對應起來。
舉例:類名上使用@DatabaseTable(tableName=””)可指定表創建時的表名;
屬性上使用@DatabaseField(columnName=””|generatedId=true|foreign=true|foreignColumnName=””)分別可指定表中字段名、該字段是否為主鍵、是否為外鍵、關聯表的外鍵名;


(2)dao:存放DaoUtils工具類,返回不同表對象的操作對象,實現對數據表的增刪改查等操作,
用戶可直接調用,若需擴展可自行繼承實現;
舉例:


可直接在程序中通過new DaoUtils對象的方式調用,傳入的參數1為SqliteOpenHelper及其子類對象,參數2為數據表對應的類對象;對不同數據表進行增刪改查操作可使用數據表對應的DaoUtils對象調用增刪改查方法實現;
(3)helper:存放DatabaseHelper 數據庫操作類,
DatabaseHelper繼承自OrmLiteSqliteOpenHelper,
封裝了數據庫的創建、更新、建表等數據庫相關操作;
用戶使用時需繼承后重寫onCreate()、 onUpdate()及帶參數的構造方法;
舉例:


onCreate():中需調用父類的onCreate()方法完成數據庫及表結構的創建;
onUpgrade():中可選擇調用父類的updateNewTable()方法,在表結構需要進行較大更改時將原有數據表刪除后重新添加;也可自行添加數據表字段修改的代碼進行表結構的更新。
構造函數:父類需要的參數為DatabaseHelper(Context context ,String DATABASE_NAME, CursorFactory factory,int DATABASE_VERSION, List<Class> tableClass)
context:上下文對象 DATABASE_NAME:數據庫名稱
factory:游標工廠 DATABASE_VERSION:數據庫版本號
tableClass:數據表對應的類對象集合
(4)utils:存放數據庫操作工具類DatabaseUtils,用於實現數據庫的備份、恢復及改變數據庫文件默認存儲位置三個功能。
2、DaoUtils類方法說明



三、數據庫備份及恢復封裝


1、操作說明:
(1)初始化DataBaseUtils類對象,需傳入一個參數:Context context:當前上下文對象
使用舉例:DataBaseUtils bru= new DataBaseUtils(MainActivity.this);
(2)進行數據備份操作:調用DataBaseUtils對象的doDataBackUp(String DB_PATH, String DB_BACKUP_PATH, MessageShow ms)方法。
使用舉例: bru.doDataBackUp(DATABASE_PATH, DB_BACKUP_PATH, new DataBaseUtils.MessageShow() { @Override public void onPepare() { Toast.makeText(MainActivity.this, "數據庫備份中!", Toast.LENGTH_LONG).show(); } @Override public void onSuccess() { Toast.makeText(MainActivity.this, "數據庫備份成功!", Toast.LENGTH_LONG).show(); } @Override public void onFail() { Toast.makeText(MainActivity.this, "數據庫備份失敗!", Toast.LENGTH_LONG).show(); } });
(3)進行數據恢復操作:調用DataBaseUtils對象的doDataRecover(String DB_PATH, String DB_BACKUP_PATH, MessageShow ms)方法。
使用舉例:
bru.doDataRecover(DATABASE_PATH, DB_BACKUP_PATH, new DataBaseUtils.MessageShow() { @Override public void onPepare() { Toast.makeText(MainActivity.this, "數據庫恢復中!", Toast.LENGTH_LONG).show(); } @Override public void onSuccess() { Toast.makeText(MainActivity.this, "數據庫恢復成功!", Toast.LENGTH_LONG).show(); } @Override public void onFail() { Toast.makeText(MainActivity.this, "數據庫恢復失敗!", Toast.LENGTH_LONG).show(); } });
4、進行設置數據庫創建位置操作:調用DataBaseUtils對象的setDatabasePath(DatabaseHelper helper,String DATABASE_PATH,int newVersionCode)方法。
因為ORMLite框架默認是在系統的data\data目錄下創建數據庫的,而實際項目中需要將數據庫創建在內存卡上,以防應用卸載后數據庫文件的丟失。所以添加了更改數據庫創建地址的方法以滿足更多操作的需要。
但是更改了數據庫的創建地址后,在之后的版本更新操作時需要更改此方法中的數據庫版本號而不是DatabaseHelper中的版本號來實現數據庫版本的升級后續操作。
使用舉例: DATABASE_PATH= Environment.getExternalStorageDirectory() + "/kktest.db"; MyDatabaseHelper helper = new MyDatabaseHelper(MainActivity.this, DATABASE_PATH); DataBaseUtils bru=new DataBaseUtils(MainActivity.this); int dataBaseVersion=1; bru.setDatabasePath(helper, DATABASE_PATH, dataBaseVersion);
5、API


四、基於ORMLite的數據庫持續更新
實現項目版本迭代過程中數據庫結構的自動不斷更新操作,滿足各項目根據版本需求在數據庫表中自動新增數據表、新增字段以及更改字段需求。
1、實現過程
背景:項目中使用ORMLite框架實現數據庫相關操作;
ORMLite框架中使用注解將每個實體類對象與數據庫中數據表關聯起來,類中使用注解的屬性與數據表中字段對應。
在項目中自定義數據庫文件的創建地址。
自定義數據庫創建地址方法:(必須在程序啟動時調用)
在程序啟動入口處的application或activity中加入以下代碼:
DataBaseUtils bru =new DataBaseUtils(MainActivity.this);
MyDatabaseHelper helper= new MyDatabaseHelper(
MainActivity.this,DATABASE_PATH);
bru.setDatabasePath(helper, DATABASE_PATH,versionCode);
指定數據庫創建的位置及當前數據庫版本號,當數據庫版本發生變化時,需更改此處的版本號。
由於在DatabaseHelper基類中重寫了getWritableDatabase()、getReadableDatabase()方法,在數據庫創建及更新時將不會自動調用onCreate()及onUpgrade ()方法,此時需要在程序啟動時的application或activity中調用setDatabasePath方法指定數據庫保存位置在此方法中實現onCreate()及onUpgrade ()方法的調用。
2、數據庫版本更新原理
(1)、數據庫初始創建


(2)當數據庫進行版本升級需新增數據表或添加/修改字段


3、使用說明
使用流程:
繼承DatabaseHelper類,重寫onCreate(),onUpgrade()方法,
(1)在onCreate()方法中調用父類createTable(ConnectionSource arg1, List<Class> tableClass)方法,創建數據表。
ConnectionSource arg1 為數據源對象
List<Class> tableClass為實體類對象集合
(2)在onUpdate()方法中調用父類updateTable(SQLiteDatabase database,ConnectionSource connectionSource, List<Class<T>> tableClass)方法,版本更新時,傳入修改過的實體對象 集合List<Class<T>> tableClass。
SQLiteDatabase database為數據庫對象
ConnectionSource connectionSource為數據源對象
List<Class<T>> tableClass 為需要更新的實體對象/新增的實體對象集合
(3)在程序啟動的入口處調用DataBaseUtils中的setDatabasePath(DatabaseHelper helper,String DATABASE_PATH,int newVersionCode)方法,版本更新時傳入新版本號int newVersionCode(創建時設為1)。
方法說明:

