源码: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)。
 
方法说明: