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. ProxySQL 故障

    发现直接连接MGR节点是正常的,可以写入,但通过ProxySQL连接就无法show\select\insert 等 使用sysbench对ProxySQL报以下错误: FATAL: `thread_r ...

  2. java-String中的 intern()

    1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...

  3. zookeeper客户端连接报错

    [root@zoo1 zookeeper-3.4.10]# bin/zkCli.sh -server 172.16.1.10:2181 2017-10-27 00:37:59,326 [myid:] ...

  4. PHP解决并发问题的几种实现

    对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制. 方案一:使用文件锁排它锁 f ...

  5. git配置用户名跟邮箱

    因为我有两个git账号 所以我现在要改变我的默认用户名跟邮件 我就需要去终端设置用户名跟邮箱 具体的命令行就是 设置git的用户名 git config --global user.name &quo ...

  6. Windows内核读书笔记——SEH结构化异常处理

    SEH是对windows系统中的异常分发和处理机制的总称,其实现分布在很多不同的模块中. SEH提供了终结处理和异常处理两种功能. 终结处理保证终结处理块中的程序一定会被执行 __try { //要保 ...

  7. Codeforces Round #302 (Div. 1) B - Destroying Roads

    B - Destroying Roads 思路:这么菜的题我居然想了40分钟... n^2枚举两个交汇点,点与点之间肯定都跑最短路,取最小值. #include<bits/stdc++.h> ...

  8. HashMap碰撞问题

    HashMap是最常用的集合类框架之一,它实现了Map接口,所以存储的元素也是键值对映射的结构,并允许使用null值和null键,其内元素是无序的,如果要保证有序,可以使用LinkedHashMap. ...

  9. windows下怎样使用md命令一次建立多级子目录

    在Windows系统中一次只能够创建一个子目录,在命令提示符窗口则可以一次性创建多个子目录,例如如果想在f盘创建多级子目录,则md 23\13\65\45,后面的数字随便都可以.如果想一次性删除多级目 ...

  10. HTTP协议的重新学习

    思论:做互联网一年多了,想了想对http协议的认识还处于很笼统的阶段,抽休息时间,重新梳理一下自己的网络知识. 1.什么叫HTTP协议? HTTP协议是Hyper TEXT Transfer Prot ...