前面做了关于这个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:指定字段为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();
工程代码:http://download.csdn.net/detail/u012565107/7067385