[置顶] Provider,ORMLite,GreenDao的实现,并且简单性能对比


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

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

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

[置顶] Provider,ORMLite,GreenDao的实现,并且简单性能对比_第1张图片

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

[置顶] Provider,ORMLite,GreenDao的实现,并且简单性能对比_第2张图片

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

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

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

[置顶] Provider,ORMLite,GreenDao的实现,并且简单性能对比_第3张图片

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

[置顶] Provider,ORMLite,GreenDao的实现,并且简单性能对比_第4张图片

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

工程代码: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:指定字段为id generatedId:指定字段为自增长的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


你可能感兴趣的:(ContentProvider,性能对比,ormlite,简单使用,greenDAO)