源码: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. jenkins添加git源码目录时报Error performing command错误

    简介 这是我在构建一个自动化部署项目中遇到的一个异常 解决步骤: 1.进入的jenkins的home目录,执行下面命令生成公钥和私钥 [root@jacky .jenkins]# ssh-keygen ...

  2. JS与树本(复杂)

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>树形 ...

  3. Minimum Depth of Binary Tree [LeetCode]

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  4. JavaScipt 数据交互

    标准的w3c直接提供了XMLHttpRequest方法,我们主要站在设计的角度来理解,如何设计出低耦合高内聚的代码jquery对Ajax的处理主要体现在对浏览器兼容,数据的处理过滤以及各种事件的封装上 ...

  5. 关于DYNPRO程序的系统迁移与版本不匹配问题之一

    前段时间公司做的一个项目,这两天在将项目程序导入公司,出问题了,搞了半天才发现是系统版本问题,但是还是不知道怎么解决,纠结ING... DYNRPO程序在创建(或是首次运行)的时候会自动生成一个DYN ...

  6. 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)

    一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...

  7. maven webjar构建及使用

    这么做的目的想要把前端静态文件,css啊js啊一堆的放在一个maven工程下管理,需要的时候调用jar包直接引用. 1.把要打包文件放到另外的maven项目的/src/main/resources下 ...

  8. HTML5的入门与深入理解

    HTML5是对HTML的第5次重大的修改,虽然HTML5 标准还在制定中,但不能阻碍其势不可挡的脚步,不用HTML5你就OUT了.HTML5与我们常用的HTML4有什么区别呢? 首先要说的是不是所有的 ...

  9. PHP xml 转换为 array

    retrun json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), tru ...

  10. php crc32,md5,sha1,mhash测试结果

    总结:php  自带hash mhash 用于散列只能加密   扩展mcrypt 用于加解密 对文件加密有的文件会隐藏换行,或者读取方式等影响导致结果不一致. 1.crc32 php: a.系统crc ...