1、创建「GREENDAO GENERATOR」模块 (纯 JAVA 工程)
1.1、添加如下依赖:
compile 'de.greenrobot:greendao:2.1.0'
1.2、在java同级目录下创建java_gen文件夹
1.3、创建DaoGenerator工具类如下:
public class UtDaoGenerator {
public static void main(String[] args) throws Exception {
// 创建一个用于添加实体(Entity)的模式(Schema)对象。
// 两个参数分别代表:数据库版本号与自动生成代码的包路径。
Schema schema = new Schema(1, "com.viciy.greendao");
// 得到Schema 对象后,就可以使用它添加实体(Entities)了。
addChat(schema);
// 最后使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。
new DaoGenerator().generateAll(schema, "E:\\Android\\AS_WorkSpace\\UtChatGreenDao\\app\\src\\main\\java_gen");
}
/**
* @param schema
*/
private static void addChat(Schema schema) {
// 一个实体(类)就关联到数据库中的一张表,此处表名为「InstallTask」(既类名)
Entity installTask = schema.addEntity("InstallTask");
// greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值
// 接下来便可以设置表中的字段:
installTask.addIdProperty();
/**
* 本次添加一下两个自定义字段:
* downloadId
* apkUrl
*/
installTask.addStringProperty("downloadId").notNull();
installTask.addStringProperty("apkUrl");
}
}
1.4、运行工具类,生成 InstallTaskDao.java、InstallTask.java、DaoMaster.java、DaoSession.java
生成的InstallTaskDao.java、InstallTask.java、DaoMaster.java、DaoSession.java 文件前面都有一个小红点 这是因为包名的问题,把这四个文件拷贝到Android项目中,将包名修改正确,并将每个文件的import 中报错部分删除,然后rebuild即可,修改后结果如下图:
PS:这里一开始不使用项目中的包名是因为,我们在开发中一般都是先写demo,再将demo移植到项目中去。若一开始创建Schema对象的包名与项目的包名一致,则不用修改,直接将上述四个文件拷入对应的包名下即可;
2、GreenDao增删改查的方法
2.1 使用GreenDao创建DbHeleper,如下:
package com.viciy.utchatgreendao;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.List;
import de.greenrobot.dao.query.Query;
/**
* Created by Viciy on 2017/01/27.
*/
public class DbInstallTaskHelper {
public final static String dbName = "chat_from_team";
private Cursor cursor;
//用于聊天对象和群名的保存
private DaoMaster.DevOpenHelper helper;
private SQLiteDatabase db;
private DaoMaster master;
private DaoSession daoSession;
public DbInstallTaskHelper(Context context) {
//初始化数据库
setupDatabase(context);
String orderBy = ChatFromTeamDao.Properties.Id.columnName + " DESC";
//查询,得到cursor
cursor = getDb().query(getDaoSession().getChatFromTeamDao().getTablename(),
getDaoSession().getChatFromTeamDao().getAllColumns(), null, null, null, null, orderBy);
}
public void setupDatabase(Context context) {
//创建数据库
helper = new DaoMaster.DevOpenHelper(context, DbInstallTaskHelper.dbName, null);
//得到数据库连接对象
db = helper.getWritableDatabase();
//得到数据库管理者
master = new DaoMaster(db);
//得到daoSession,可以执行增删改查操作
daoSession = master.newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
public SQLiteDatabase getDb() {
return db;
}
/**
* 添加
*/
public void add(String apkUrl, String downloadId) {
InstallTask chatFromTeam = new InstallTask(null, apkUrl, downloadId);
//面向对象添加表数据
getDaoSession().getChatFromTeamDao().insert(chatFromTeam);
cursor.requery();//刷新
close();
}
/**
* 根据sessionid删除
*/
public void delete(String apkUrl, String downloadId) {
InstallTask chatFromTeam = new InstallTask(null, apkUrl, downloadId);
getDaoSession().getChatFromTeamDao().delete(chatFromTeam);
cursor.requery();
close();
}
/**
* 更新
*/
public void update(String apkUrl, String downloadId) {
InstallTask chatFromTeam = getDaoSession().getChatFromTeamDao().queryBuilder().where(ChatFromTeamDao.Properties.Sessionid.eq(apkUrl)).build().unique();
chatFromTeam.setDownloadId(downloadId);
getDaoSession().getChatFromTeamDao().update(chatFromTeam);
cursor.requery();
close();
}
/**
* 查询
*
* @ param sessionid
*/
public List<InstallTask> query(String apkUrl) {
// Query 类代表了一个可以被重复执行的查询
Query<InstallTask> query = getDaoSession().getChatFromTeamDao().queryBuilder()
.where(ChatFromTeamDao.Properties.Sessionid.eq(apkUrl))
.orderAsc(ChatFromTeamDao.Properties.Id)
.build();
// 查询结果以 List 返回
List<InstallTask> count = query.list();
close();
return count;
}
/**
* 关闭cursor
*/
public void close() {
cursor.close();
}
}
2.2、GreenDao增删改查的的使用
创建DbInstallTaskHelper对象,调用它的增删改查方法即可,如:
DbInstallTaskHelper helper = new DbInstallTaskHelper(context);
List<InstallTask> query = helper.query("1234");
本文介绍如何使用GreenDao生成数据库操作代码及实现基本的增删改查功能。

1275

被折叠的 条评论
为什么被折叠?



