GreenDao、Ormlite、Realm性能对比
该博文为我本人亲测,代码编写过程中使用到了百度上很多大神的demo,如http://blog.csdn.net/shareye1992/article/details/50789216,http://blog.csdn.net/hedong_77/article/details/53167774,http://blog.csdn.net/wds1181977/article/details/51584052等博文。自己学习的同时也希望大家一起成长,第一次写自己的,博客希望大家能够谅解
当前android开发中常用的数据库框架有GreenDao、Ormlite、Realm等,这里本人仅就自己的对这三种数据库框架增、删、改、查四个方面运行速度上的性能进行对比,并附上相关代码。下面就这三个框架逐个分析。
一、 GreenDao
1.在 ANDROID 工程中配置「GREENDAO GENERATOR」模块
GreenDAO是一个将对象映射到 SQLite 数据库中的轻量且快速ORM 解决方案。这里我所进行测试的GreenDao版本为greendao:1.3.7。详细测试demo流程如下:
(1)新建工程,并在src/main/java文件下新建package包javagen(这里不同于网上所说在java同级目录下建立java-gen)。
(2)配置 Android 工程(app)的 build.gradle,添加
sourceSets {
main {
java.srcDirs = ['src/main/java','src/main/java/javagen']
}
}
compile'de.greenrobot:greendao:1.3.7'
如图所示:
2.新建纯 JAVA 工程「GREENDAO GENERATOR」模块
(1)通过 File -> New -> New Module -> JavaLibrary -> 填写相应的包名与类名 -> Finish.此处本人包名为daoexamplegenerator类名为ExampleDaoGenerator,完成后编写ExampleDaoGenerator类代码,具体如下:
public class ExampleDaoGenerator {
public static void main(String[] args) throws Exception {
//两个参数分别代表:数据库版本号与自动生成代码的包路径。
Schema schema = new Schema(1, "lzy.greendao");
addNote(schema);
// 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录。
New DaoGenerator().generateAll(schema,"/software_forwork/androidstudio/MyProject/
DaoDemo/app/src/main/java/javagen");
}
private static void addNote(Schema schema) {
// 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)
Entity note = schema.addEntity("Note");
note.addIdProperty();
note.addStringProperty("text").notNull();
note.addStringProperty("comment");
}
}
3.自动生成文件
执行 generator 工程,如一切正常,你将会在控制台看到如下日志,并且在主工程「java-gen」下会发现生成了DaoMaster、DaoSession、NoteDao、Note共4个类文件。此时文件结构如下图:
4.在MainActivity中进行测试,具体代码如下:
public class MainActivity extends AppCompatActivity {
private SQLiteDatabase db;
private DaoMaster daoMaster;
private DaoSession daoSession;
private Cursor cursor;
public static final String TAG = "DaoExample";
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupDatabase();
new Thread(new Runnable() {
@Override
public void run() {
deletetAll();
//addNote();
// search();
}
}
).start();
}
private void setupDatabase() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
db = helper.getWritableDatabase();
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
private void search() { // Query 类代表了一个可以被重复执行的查询 Long before=Long.valueOf(System.currentTimeMillis()); System.out.println("查询之前的时间为:"+before); List<Note> list= getNoteDao().loadAll(); System.out.println(list.get(9999).getText()+"***************************************"); Long after=Long.valueOf(System.currentTimeMillis()); System.out.println("查询之后的时间为:"+after); System.out.println("时间差为"+(after-before)+"毫秒"); }public void deletetAll () {
Long before=Long. valueOf(System. currentTimeMillis()) ;
System. out .println( " 删除之前的时间为: " +before) ;
getNoteDao().deleteAll() ;
Long after=Long.valueOf(System.currentTimeMillis()) ;
System. out .println( " 删除之后的时间为: " +after) ;
System. out .println( " 时间差为 " +(after-before)+ " 毫秒 " ) ;
}
private void addNote() String noteText = "小明"; String comment = "Added on "; // 插入操作,简单到只要你创建一个 Java 对象 Note note =null; Long before=Long.valueOf(System.currentTimeMillis()); System.out.println("存储之前的时间为:"+before); for(int i=0;i<10000<