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. ACM International Collegiate Programming Contest World Finals 2014

    ACM International Collegiate Programming Contest World Finals 2014 A - Baggage 题目描述:有\(2n\)个字符摆在编号为\ ...

  2. 003_循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别

    表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...

  3. 端口扫描———nmap

    nmap教程之nmap命令使用示例(nmap使用方法) 浏览:8268 | 更新:2014-03-29 17:23 Nmap是一款网络扫描和主机检测的非常有用的工具.Nmap是不局限于仅仅收集信息和枚 ...

  4. 以太坊go-ethereum客户端(三)两种全节点启动模式

    这篇博客介绍一下go-ethereum全节点的两种启动模式:主网络快速启动和测试网络快速启动.这也是客户端所提供的两种启动方式,直接拿来使用即可.下面具体介绍一下使用方法. 主网络快速启动 其实,我们 ...

  5. Linux 用户篇——用户管理命令之useradd、passwd、userdel、usermod

    一.用户重要,用户管理命令同样重要 用户是Linux系统安全的核心,每个登录Linux系统的用户都会分配相应的权限,这些权限取决于能否访问系统中各种对象.而管理这些用户的相关信息离不开用户管理命令,比 ...

  6. CSU 1355 地雷清除计划

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1355 好题,根本想不到是网络流. 模型如图: 假想从右上角到左下角有一条阻拦线,我们就是 ...

  7. php简明学习教程

    1.变量 <?php //变量声明(php变量无需单独创建,变量会在第一次赋值时创建) $a = 1; //弱类型(php变量会根据其值自动转换为相应的数据类型) $a = "a&qu ...

  8. list 往指定的下标插入元素

    list 往指定的下标插入元素 import java.util.*; public class ListExample{ public static void main(String[] args) ...

  9. OOD沉思录 --- 类和对象的关系 --- 使用关系

    使用关系 对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系 使用关系的最关键问题在于,A如何找到B,存在6种方案 方案一: A包含了B,B作为一个成员定义在A的类中,那 ...

  10. ZOJ 3957 Knuth-Morris-Pratt Algorithm

    暴力. #include<bits/stdc++.h> using namespace std; ]; int main() { int T; scanf("%d",& ...