1. ORMLite

特性:

  • 通过在类上添加注解设置类
  • 强大抽象DAO类
  • QueryBuilder 可以灵活的构造简单和复杂的查询语句
  • 支持MySQL, Postgres, Microsoft SQL Server, H2, Derby, HSQLDB, and Sqlite, 并且能够容易的扩展到其它的关系数据库
  • 临时支持DB2, Oracle, ODBC and Netezza.
  • 能防止编译好的语句重复查询
  • 支持外键
  • 支持基本的数据库事务
  • 自动生成创建和删除SQL语句
  • 支持不用注解配置表和字段
1. 支持表与JavaBean的映射

2. 支持表之间的关联查询

3. 支持,onetomany, manytomany

4. 社区很活跃,更新速度快

2. androidorm

主要功能特征:

1.实现数据库与java对象之间的映射转换

2.增加属性时自动更新数据库结构而不影响数据

3.支持sql直接操作,包括取对象列表

4.基于Apache License 2.0,可任意修改或二次开发

不足:

1. 不支持onetomany, manytomany

2. 不支持数据之间的关联查询

3. 更新速度慢,社区不活跃

ActiveAndroid
 
主要功能特征:
1.实现数据库与java对象之间的映射转换

2.增加属性时自动更新数据库结构而不影响数据

3.   支持onetomany

不足:

1. 数据表中一定有一列是id
在项目正式发布进行代码混淆时需要在proguard配置文件中添加以下部分:

-keep class com.activeandroid.** { *; }

-dontwarn com.ikoding.app.biz.dataobject.**
-keep public class com.ikoding.app.biz.dataobject.** { *;} -keepattributes *Annotation*

具体来说就是com.activeandroid包中的代码不做混淆,标注有@Table注解的类不做混淆,并且不能去掉标注有@Table类的属性上的@Column注解。

性能比较:

硬件环境:模拟器:nexus s(800*480) 内存:512M

插入20000条数据(两个表有关联关系,A表4个字段,B表2个字段)

第一次:

框架类型 用时(ms)
ormlite 38445
activeandroid 132376

第二次:

框架类型 用时(ms)
ormlite 47384
activeandroid 142627

第三次:

框架类型 用时(ms)
ormlite 41974
activeandroid 133260

平均:

框架类型 用时(ms)
ormlite 42601
activeandroid 136087.7

插入速度,activeandroid 明显没有ormlite 效率高, 都是批量插入。

从20000多条数据中查询20条

第一次:

框架类型 用时(ms)
ormlite 310
activeandroid 195

第二次:

框架类型 用时(ms)
ormlite 86
activeandroid 72

第三次:

框架类型 用时(ms)
ormlite 89
activeandroid 80

第四次:

框架类型 用时(ms)
ormlite 95
activeandroid 53

第五次:

框架类型 用时(ms)
ormlite 89
activeandroid 36

第六次:

框架类型 用时(ms)
ormlite 81
activeandroid 61

第七次:

框架类型 用时(ms)
ormlite 87
activeandroid 51

平均:除了第一次之外的平均值

框架类型 用时(ms)
ormlite 87
activeandroid 58

现象:

1. 第一次普遍大,框架类型ormlite在300ms左右;而activeandroid在200ms左右。

可能原因是:

1. 第一次的原因是,在查询是需要与数据库建立连接,需要耗时长

2. 第二次时间短,不用再建立连接。

3. 在一次之后,某次查询时间才,因为数据连接被关闭。需要重新建立连接

4. ormlite 使用完连接,很快会释放, activeandroid 不会很快释放  所有activeandroid的查询速度比ormlite 快

备注 :如果读者有提高ormlite 查询速度的方案,请留言, 谢谢

测试代码:

ormlite:

插入:

getHelper().getDao().callBatchTasks(new Callable<Void>(){
@Override
public Void call() throws Exception {
long t1 = System.currentTimeMillis() ;
for(int i = 3 ; i < 10003 ; i ++){
Classes cl = new Classes() ;
cl.setName("cl" + i) ;
getHelper().getClassesDao().create(cl); Student student2 = new Student() ;
student2.setName("stu" + i) ;
student2.setAge(i) ;
student2.setClasses(cl) ;
getHelper().getDao().create(student2) ;
}
System.out.println(System.currentTimeMillis() - t1);
return null;
}}) ;

查询:

long t1 = System.currentTimeMillis() ;
QueryBuilder<Student, Integer> builder = getHelper().getDao().queryBuilder() ;
builder.where().le("_id", 50) ;
builder.limit(20l).orderBy("_id", false);
List<Student> stus = getHelper().getDao().query(builder.prepare()) ;
System.out.println(System.currentTimeMillis() - t1);

activeandroid:

插入:

long t1 = System.currentTimeMillis() ;
ActiveAndroid.beginTransaction();
try {
for(int i = 4 ; i < 10004 ; i ++){ Classes cl = new Classes() ;
cl.setName("cl" + i) ;
cl.save(); Student student2 = new Student() ;
student2.setName("stu" + i) ;
student2.setAge(i) ;
student2.setClasses(cl) ;
student2.save();
}
ActiveAndroid.setTransactionSuccessful();
}
finally {
ActiveAndroid.endTransaction();
} System.out.println(System.currentTimeMillis() - t1);

查询:

long t1 = System.currentTimeMillis() ;
List<Student> students = new Select().from(Student.class).where("id <= ?", 50).limit(20).orderBy("id desc").execute() ;
System.out.println(System.currentTimeMillis() - t1);

android ORM 框架 search的更多相关文章

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

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

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

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

  3. Android ORM 框架之 greenDAO

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

  4. 最好的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  5. 推荐的Android ORM框架

    1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...

  6. 最受欢迎的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  7. Android orm 框架xUtils简介

    数据库操作建议用ORM框架,简单高效.这里推荐xUtils,里面包含DBUtils.github地址:https://github.com/wyouflf/xUtils 获得数据库实例建议用单例模式. ...

  8. android ORM框架ORMLite封装

    源码:http://download.csdn.net/detail/a924571572/9415506 一.框架效率对比 由于目前公司里面android端数据的数据量基本在千条以内,所以选择了更为 ...

  9. Android 自定义Android ORM 框架greenDAO数据库文件的路径

    import android.content.Context; import android.content.ContextWrapper; import android.database.Datab ...

随机推荐

  1. 64_p1

    PEGTL-devel-1.3.1-2.fc26.i686.rpm 13-Feb-2017 22:10 64086 PEGTL-devel-1.3.1-2.fc26.x86_64.rpm 13-Feb ...

  2. 大数据系列之Flume+kafka 整合

    相关文章: 大数据系列之Kafka安装 大数据系列之Flume--几种不同的Sources 大数据系列之Flume+HDFS 关于Flume 的 一些核心概念: 组件名称     功能介绍 Agent ...

  3. Codeforces Round #434 (Div. 2)

    Codeforces Round #434 (Div. 2) 刚好时间对得上,就去打了一场cf,发现自己的代码正确度有待提高. A. k-rounding 题目描述:给定两个整数\(n, k\),求一 ...

  4. Windows下Oracle数据库自动备份批处理脚本

    expdb命令版本 @echo off REM ########################################################### REM # Windows Se ...

  5. mac 上 sublime text2 快捷键

    打开/前往: ⌘T 前往文件 ⌘⌃P 前往项目⌘R 前往 method⌘⇧P 命令提示⌃G 前往行⌃ ` python 控制台 编辑:⌘L 选择行 (重复按下将下一行加入选择)⌘D 选择词 (重复按下 ...

  6. 第一天开始使用Oracle

    上半年虽然已经学习了Oracle,但是基本上实验课都没怎么实践过,感觉自己之前过得太水了! 在我的印象里,Oracle 的难度相当于工程师的建设一个亚洲最大的医院一样,也如医生的99%失败率的手术: ...

  7. Transport failed: java.io.EOFException

    ActiveMQ服务端有时会报Transport failed: java.io.EOFException这样的错误,这是由客户端丢失连接并反复尝试连接导致的,不是什么大问题,有时网络波动就会产生这种 ...

  8. highcharts自定义导出文件格式(csv) highcharts的一些使用心得

    highcharts是国外的一个图表插件,包括各种数据图形展示,柱形图,线性图等等,是手机端和pc端最好的图表插件之一,相比于百度的echarts更加轻便和易懂.链接http://www.hchart ...

  9. scrapy 学习笔记2

    本章学习爬虫的 回调和跟踪链接 使用参数 回调和跟踪链接 上一篇的另一个爬虫,这次是为了抓取作者信息 # -*- coding: utf-8 -*- import scrapy class Myspi ...

  10. ASP.NET WebAPI 05 参数绑定

    ParameterBindingAttribute 在上一篇中重点讲了ModelBinderAttribute的使用场景.这一篇详细的讲一下ModelBinder背后的参数绑定原理. ModelBin ...