Provider,ORMLite,GreenDao的实现,并且简单性能对比

这篇博客对比了Android中ContentProvider、ORMLite和GreenDao在性能和简单使用方面的表现。测试结果显示,GreenDao在插入和查询性能上占据优势,而ContentProvider在查询速度上有良好表现。ORMLite因使用反射技术导致速度较慢,且无一次性删除所有数据的接口。博客提供了简单的使用教程和工程代码链接,供读者进一步测试和学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面做了关于这个3个android数据库操作的一个简单比较。今天就做一个简单性能对比。

并且做一个简单实现的教程。这3种方式的简答教程在贴图对比后面哈。

先看结果吧。嗯首先是插入5000条数据并且查询。测试机子是note 2。

GreenDao 优势很大。 然后查看读取操作的结果:

provider直接查询得到Cursor解析 还比较快一些。(read 很多次得到的一个正常概率的结论)

然后数据1000条。  每次插入之前先删除之前的所有的数据。

发现ORMLite 没有一次性删除全部的接口,只能删除one by one所以很慢。

发现跟5000 的结论很相似。再看read

好了可以看出结果了。还有一些条件查询,条件删除,批量操作的还没有测试。大家可以把工程下载下去自己加代码测试一下哈。

工程代码:http://download.csdn.net/detail/u012565107/7067385

contentProvider 各种表现还不错。就是写起来复杂很多。还好整个android生态系统中用到这个地方很多。不清楚那些应用看:http://blog.csdn.net/u012565107/article/details/20042339

ORMLite 用注解的方式,代码量少一些。但是用到了java的反射,所以慢一些。

GreenDao 没有用注解,所以比较快。但是还得用它提供的工具先去生成代码。这个开始弄的晕乎乎的。。。。代码量的话,Greendao也不多。

简单教程使用:ContentProvider 太多教程了。不说了。自行百度,google

ORMlite的资料很全面。

1,写一个类 继承OrmLiteSqliteOpenHelper 实现其中的onCreate() 和onUpgrade()方法,和android提供的SQLiteOpenHelper类似。

只是onCreate()写法不一样,因为是注解嘛。

	try
        {
		TableUtils.createTable(arg1, User.class);//User.class 就是我们写入的表的映射对象。
		System.out.println("orm:创建数据库成功");
        }
        catch (Exception e)
        {
        	System.out.println("orm:创建数据库失败");
	        // TODO: handle exception
        	e.printStackTrace();
        }

User要用注解。注解的解释

cloumnName:指定字段名,不指定则变量名作为字段名 canBeNull:是否可以为null 
dataType:指定字段的类型defaultValue:指定默认值 width:指定长度
 id:指定字段为idgeneratedId:指定字段为自增长的id,不能id,generatedIdSequence通用foreign 指定这个字段的对象是一个外键,外键值是这个对象的id
useGetSet:指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量throwIfNull,如果空值抛出异常persisted:指定是否持久化此变量,默认true
unique:字段值唯一uniqueCombo整列的值唯一index:索引
uniqueIndex 唯一索引foreignAutoRefresh 外键值,自动刷新foreignAutoCreate 外键不存在时是否自动添加到外间表中
foreignColumnName外键字段指定的外键表中的哪个字段  

然后 Activity 继承OrmLiteBaseActivity。这样就一个getHelper()的方法可以得到最开始定义的Helper的实例。

如果不继承OrmLiteBaseActivity 那么需要自己去打开关闭Helper。

插入等操作,看我的工程示例吧。


然后说一下 GreenDao资料是在不多。都是相互抄。。。我看到一个真的写得很详细的:http://blog.csdn.net/krislight/article/details/9391455教程

可以看看官网http://greendao-orm.com/

也可以去Git 下载上面有示例:https://github.com/greenrobot/greenDAO

然后GreenDao用到了3个jar

GreenDao.jar 是android程序使用。

greenDao-generator.jar  freemarker.jar是在编程的时候,为android程序生成数据库相关的代码使用jar。

附上地址:http://download.csdn.net/detail/u012565107/7066455 上面也有怎么去下载最新的jar的一个说明。

首先建一个Java工程去生成android 程序需要的代码。 生成的代码包括实体类,以及对于的Dao 操作类等。类似android 产生的R.class 。

生成的代码:

public class ExampleDaoGenerator {

    public static void main(String[] args) throws Exception {
        Schema schema = new Schema(3, "com.example.dbtest.greendao.dao");

        addUser(schema);//生成User表的 实体类User 和UserDao类型。

        //生成的文件放到对于的目录。这是一个相对路径。要求dbtext项目和这个 ExampleDaoGenerator项目处于相同的目录下
        new DaoGenerator().generateAll(schema, "../dbTest/src-gen");
    }

    private static void addUser(Schema schema) {
        Entity note = schema.addEntity("users");
        note.addIdProperty();
        note.addStringProperty("name").notNull();
        note.addStringProperty("phone");
    }

}
这个代码的作用是生成在android程序中需要的代码。

运行改代码后 在dbText下面的src-gen目录下面产生4个类:

DaoMaster.java    DaoSession.java  和表项相关的 User.java  UserDao.java  如果你还有其他表项 也会生成 对应的实体类和Dao操作类。

然后Android项目就用生成的Dao类去操作数据库。


然后代码里面就通过Java工程生成的代码 得到Dao类型

		//greenDao创建数据库
		DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greendao.db", null);
		DaoMaster daoMaster = new DaoMaster(helper.getWritableDatabase());
		usersDao = daoMaster.newSession().getUsersDao();


userDao 提供的对于CURD的支持。


工程代码:http://download.csdn.net/detail/u012565107/7067385


评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值