Android-greenDAO的学习使用
2018-07-17 本文已影响0人
夏_Leon
一、常用查询
1.loadAll(); 查询所有的数据
2.条件查询 查询单个字段 获取对象 eq 方法
TaskPath taskPath = mTaskPathDao.queryBuilder().where(TaskPathDao.Properties.Task_name.eq("小红帽")).unique();
3.条件查询---查询不是该字段内容的 对象有哪些 notEq 方法
List mtaskPath = mTaskPathDao.queryBuilder().where(TaskPathDao.Properties.Task_name.notEq("小黄人")).list();
4.条件查询--模糊查询之包含某个特殊字的查询--queryLike方法
List mtaskPath = mTaskPathDao.queryBuilder().where(TaskPathDao.Properties.Task_name.like("小%")).list();
5.自定义查询---使用SQL语句查询 ---rawQuery方法
//查询某一字段中不重复的字段内容
private static final String SQL_DISTINCT_ENAME = "SELECT DISTINCT "+TaskPathDao.Properties.Task_name.columnName+" FROM "+TaskPathDao.TABLENAME;
public static List listEName(DaoSession session) {
ArrayList result = new ArrayList();
Cursor c = session.getDatabase().rawQuery(SQL_DISTINCT_ENAME, null);
try{
if (c.moveToFirst()) {
do {
result.add(c.getString(0));
} while (c.moveToNext());
}
} finally {
c.close();
}
return result;
}
6.load(key) ;---根据key查询
方法归纳:
1.unique() // 返回唯一结果或者 null
2.list() // 返回结果集进内存
3.long count() // 获取结果数量
二、一些坑
1、修改字段结构必须要升级gradle中的greendao版本,否则可能出现“SQLiteException: no such table”错误
schemaVersion 1002
2、报错Didn't find class "net.sqlcipher.database.SQLiteOpenHelper" on path: DexPathList ,也能正常运行,但是每次运行都会报一堆这种错误。引入下面的加密库就行
implementation 'net.zetetic:android-database-sqlcipher:3.5.7@aar'
项目中如果有使用到数据库加密,则在初始化中进行设置
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "user.db", null);
//Database dataBase1 = helper.getWritableDb();
Database database = helper.getEncryptedWritableDb("123");//无加密则不需要设置
daoSession=new DaoMaster(database).newSession();
3、数据库升级必须手动些升级类,一般采用下面这个库,具体方法网上很多
compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.1.0'
4、如果你高频查询的时候,发现查询到的数据不对,与数据库中的不符,那么可能是缓存问题,greendao默认开启了缓存查询提高速度,但也导致错的非常莫名其妙,用EntityDao. detachAll()来解决:
//获取所有统计数据
public List<StatisticalRecordEntity> getAllStatisticalRecords() {
mStatisticalRecordEntityDao.detachAll();//清理缓存
List<StatisticalRecordEntity> list = mStatisticalRecordEntityDao
.queryBuilder()
.list();
return list;
}
5、Greendao无法修改部分字段,Greendao只有update整体修改entity,如果你只想修改部分字段,你得先从数据库取出对应的entity,把修改的字段覆盖上去,再对这个entity进行update。