我们在进行android APK开发的时候经常要用到数据库,最初的时候我们都是自己写DBOpenHelper继承SQLiteOpenHelper,DbManager去管理数据库的表,而且经常会碰到不同线程访问的问题导致APK挂掉的问题,greenDAO 就可以很好的帮我们处理掉这些问题。用起来也非常的方便,用greenDAO的时候我们自己不用考虑什么问题。
网上也有好多关于greenDAO的文章。我这里就用一个很简单的例子写给像我一样刚入门级别的菜鸟看,我也是偶然在一个项目中用到了,如果你也是和我一样第一次使用greenDAO,可以结合代码一起看下怎么使用,可以让你很快的入门。
实例代码CSDN下载地址不用资源分下载
例子写的非常的简单,没有进行很多数据库的操作,只是让像我一样菜鸟的人能够大概知道要怎么使用。
代码是基于android studio的代码,主要包括两个module(app, templategenerator)。app module是android 工程是在这个工程里面都数据库进行操作。templategenerator module是java工程是用来自动greenDAO相关的代码。
project(':templategenerator') {
apply plugin: 'application'
apply plugin: 'java'
mainClassName = "com.mktech.gsmartrouter.MobileTemplateGenerator"
// edit output direction
def outputDir = "../app/src-gen"
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'de.greenrobot:DaoGenerator:1.3.0'
compile 'org.freemarker:freemarker:2.3.20'
}
sourceSets {
main {
java.srcDirs = ['src/main/java']
resources.srcDirs = ['res']
}
}
task createDocs {
def docs = file(outputDir)
docs.mkdirs()
}
run {
args outputDir
}
}
public void generateAll(String outDir) throws Exception {
Schema schema = new Schema(1, "greendao");
addCloudAccounts(schema);
addHomeShareUploadTableInfo(schema);
new DaoGenerator().generateAll(schema, outDir);
}
private static void addCloudAccounts(Schema schema) {
Entity accounts = schema.addEntity("User");
accounts.addStringProperty("password").notNull();
accounts.addStringProperty("username").notNull().primaryKey();
accounts.addBooleanProperty("rememberPassword");
}
private static void addHomeShareUploadTableInfo(Schema schema) {
Entity uploadInfo = schema.addEntity("HomeShareUploadInfo");
uploadInfo.addIdProperty().autoincrement();
uploadInfo.addStringProperty("filename").notNull();
uploadInfo.addStringProperty("md5").notNull();
uploadInfo.addStringProperty("from").notNull();
uploadInfo.addStringProperty("to").notNull();
uploadInfo.addDateProperty("uploadTime").notNull();
uploadInfo.addIntProperty("percent");
uploadInfo.addIntProperty("state");
uploadInfo.addIntProperty("type");
}
这里我就随便建了两个表User表 和 HomeShareUploadInfo表,如果需要的话可以继续添加比较简单。
Schema schema = new Schema(1, “greendao”); 中 greendao 是包的名字(/app/src-gen 文件夹下面的包的名字)
当执行`
public static void main(String[] args) throws Exception {
new DaoTemplate().generateAll(args[0]);
}
完之后就会在../app/src-gen/greendao目录下面生成一些文件,当然前提是要保证这个目录在执行templategenerator module 之前是存在。 这样templategenerator module的功能就结束了(写的非常简单,一些具体的东西可以去google下)。
sourceSets {
main {
java.srcDirs = ['src', 'src-gen']
}
}
依赖库
compile 'de.greenrobot:greendao:1.3.7'
在application 中获取 private DaoSession mDaoSession 全局使用; DaoSession类是代码自动生成的。
private void setupDatabase() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "gsmartrouter-mobile.db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
mDaoSession = daoMaster.newSession();
}
public DaoSession getDaoSession() {
return mDaoSession;
}
然后就是具体的操作了,对于每个表我们一般都会对应一个class如图
在对应的表的class里面写相应的数据库的操作,具体的可以看下class文件里面的内容,网上也有很多greenDAO数据库增删改查的例子,仿照来写就可以了。
具体调用
private void saveInDatabase() {
Task.callInBackground(new Callable<Void>() {
@Override
public Void call() throws Exception {
/** save info to database */
User user = new User("abc", "abc", false);
UserRepository.insertOrUpdate(mContext, user);
return null;
}
});
}
private void readFromDatabase() {
Task.callInBackground(new Callable<Void>() {
@Override
public Void call() throws Exception {
/** read info from database */
List<User> list = UserRepository.getAll(mContext);
Log.d("vae_tag", list.size() + " = size");
return null;
}
});
}
就简单的调用了插入和读取。主要是
User user = new User("abc", "abc", false);
UserRepository.insertOrUpdate(mContext, user);
和
List<User> list = UserRepository.getAll(mContext);
Log.d("vae_tag", list.size() + " = size");
使用的时候要先运行templategenerator module让自动生成对应的代码。运行方法如图。
然后就随便你怎么操作了。用同样的方式可以很方便的运用到大家的项目当中去。
写的比较乱,但还是希望能在大家在不知道greenDAO如何使用的时候起到入门的作用。