这两天做实验室的android项目,设计到sqlite数据库。一共有十几个表都要用sqlite数据库做,想起sqlite的复杂,顿时压力好大。赶快上网上看看有没有什么解决办法。经过一番查找,发现GreenDAO这个工具,它是一个基于sqlite的ORM框架,目的是为让开发人员减少sqlite的繁琐。
感觉网上的博客等过于繁琐,不利于使用,特此简化一下,可以直接使用,如果想深入了解的码农,可以去GreenDAO简明教程看看,也可以去官网深入学习一下。
其实GreenDAO非常简单,就是把要存储的表都变成一个个实体。
这是我的测试代码。
使用过程大概分为以下两部分:
一、数据库生成
1.创建一个java工程
在
package cn.blunce.person_db_gen;
import java.io.IOException;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
public class PersonDBGen {
public static void main(String[] args) throws IOException, Exception {
// TODO Auto-generated method stub
Schema schema = new Schema(1, "cn.blunce.app.models");
addPerson(schema);
new DaoGenerator().generateAll(schema, "../PersonDBTest/src");
}
private static void addPerson(Schema schema) {
// TODO Auto-generated method stub
Entity person = schema.addEntity("Person");
person.addIdProperty();
person.addStringProperty("name");
person.addStringProperty("birthday");
}
}
中Schema schema = new Schema(1, "cn.blunce.app.models");
这句第一个参数可以随便设置,第二个参数是产生的代码所存放的包名,addPerson(schema)
这句详细下面再说,其实就是将实体添加到数据库中,new DaoGenerator().generateAll(schema, "../PersonDBTest/src")
这句的第一个参数没什么好说的,第二个参数是产生的代码存放的目录,和linux下的目录表示方法差不多。
2.添加表
在这个函数
private static void addPerson(Schema schema) {
// TODO Auto-generated method stub
Entity person = schema.addEntity("Person");
person.addIdProperty();
person.addStringProperty("name");
person.addStringProperty("birthday");
}
中,Entity person = schema.addEntity("Person");
Person是要添加的表名,person.addIdProperty();
一般都添加,person.addStringProperty("name");
添加各种属性,name是属性名,也可以添加double,和int型的属性。
3.生成数据库
直接运行,就会在相应的目录生成
**注意目的目录一定要已经创建好,否则会报错。
二、数据库使用
在使用之前一定要初始化一下,这步不可缺少。
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "person-db",null);
SQLiteDatabase mDatabase =helper.getWritableDatabase();
DaoMaster mDaoMaster = new DaoMaster(mDatabase);
DaoSession mDaoSession = mDaoMaster.newSession();
PersonDao mPersonDao = mDaoSession.getPersonDao();
// 1.增加记录
Person person1 = new Person(null, "a", "1010");
Person person2 = new Person(null, "b", "1011");
mPersonDao.insert(person1);
mPersonDao.insert(person2);
// 2.删除记录
mPersonDao.delete(person1);
// 3.更改记录
person1.setBirthday("fjadklsjfak");
mPersonDao.insertOrReplace(person1);
// 4.查找记录
List<Person> persons = mPersonDao.queryBuilder()
.where(Properties.Name.eq("a")).list();
// List<Person> persons = mPersonDao.loadAll();
Log.i("QueryTest", persons.get(0).getBirthday());
过程中要使用的jar包:下载地址
关于自定义代码的使用:
GreenDAO产生的代码估计很少会改,要改也是改哪些名字里不含有Dao的文件。
// KEEP INCLUDES - put your custom includes here
// KEEP INCLUDES END
这是导入包的时候添加的。
// KEEP FIELDS - put your custom fields here
// KEEP FIELDS END
这是自添加定义变量的时候添加的,还在试验,估计是这个作用。
// KEEP METHODS - put your custom methods here
// KEEP METHODS END
这是添加自定义方法的时候添加的。当让还有一个东西要添加就是schema.enableKeepSectionsByDefault();
别忘记在生成程序里添加。
假设要把其它的属性设置成主键,就把person.addIdProperty();
的属性删除。