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

android ORM框架ORMLite封装的更多相关文章

  1. Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

    Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...

  2. Android 数据库框架ormlite

    Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...

  3. Android数据库框架-----ORMLite 的基本用法

    ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁: 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面. 缺点:1.基于反射,效率较低(本 ...

  4. Android 数据库框架OrmLite的使用(一)

    在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...

  5. 简单实用的Android ORM框架TigerDB

    TigerDB是一个简单的Android ORM框架,它能让你一句话实现数据库的增删改查,同时支持实体对象的持久化和自动映射,同时你也不必关心表结构的变化,因为它会自动检测新增字段来更新你的表结构. ...

  6. Android数据库框架-----ORMLite关联表的使用

    上一篇已经对ORMLite框架做了简单的介绍:Android数据库框架-----ORMLite 的基本用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用 ...

  7. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

  8. 数据库 ORM框架 ORMLite

    几个ORM框架的比较 先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思.其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语 ...

  9. Android ORM 框架之 greenDAO

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

随机推荐

  1. C# 6.0 Feature list

    Feature Example C# VB Auto-property initializers public int X { get; set; } = x; Added Exists Getter ...

  2. C#编码规范 转 http://www.cnblogs.com/wulinfeng/archive/2012/08/31/2664720.html

    C#编码规范   1  规范目的 ……………………………………………………… 3 2  适用范围 ……………………………………………………… 3 3  代码注释 ………………………………………………… ...

  3. the usage of map.put

    这个不用要的那么详细,对于应用来说,比如举个例子: Map map = new HashMap();map.put("key","value");这样就存入了一 ...

  4. sql练习记录

    三表关联如果字段为0则表示是散客卡 select a.shop_id as id,b.shop_name,a.balance,a.point,(IF(a.card_type_id<>0,c ...

  5. php时间设置为本地

    PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to ...

  6. WC项目

    #include <stdio.h> #include <string.h> int *getCharNum(char *filename, int *totalNum); i ...

  7. Web自动化基础(一)使用Selenium定位元素

    什么是元素?我们知道网页上有什么内容显示出来,比如一个按钮,一个输入框,一张图片,都可以理解成元素,这些元素是由html代码构成的,比如图片可以用<img>标签来展示,一个输入框可以用&l ...

  8. F2工作流引擎之组织用户模型(四)

    1 概述 工作流组织模型是工作流引擎中核心重要的一部份,是实现人机交互中不可或缺的组成部分,而由于工作流引擎需要适应不同的系统之间存在组织用户结构的不同, 如组织表中字段名不同,所以需要实现适应不同系 ...

  9. 单独部署activemq-web-console (转载)

    activemq-web-console的默认使用方式是通过在activemq.xml中导入jetty.xml配置一个jetty server来实现的. 其实activemq-web-console完 ...

  10. .net下开发ActiveX控件

    `   ActiveX 是一个开放的集成平台,为开发人员. 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ActiveX, 可 ...