上一篇讲到了greenDao3.2.2的集成与最基本的增查改删(CRUD)操作,接下来讲一讲更细致的一些简单且常用的查找、删除操作
- 查找(Read)操作
我们可以根据非主键来进行查找,具体方法是通过,greenDao对应的Properties来获取到你的键名称,从而根据对应的字段进行查找,具体实现如下:
/**
* 按照指定字段进行查询,查询结果是一个数据集
* @param conditions
* @return
*/
public static List<TestDb> searchByCondition(String conditions){
try {
return DataBaseUtils.getDaoSession().getTestDbDao().queryBuilder().where(TestDbDao.Properties.Uiname.eq(conditions)).list();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
//下面还提供了查询单条数据的方法,如果需要可以自己封装
//TestDb testDb = DataBaseUtils.getDaoSession().getTestDbDao().queryBuilder().where(TestDbDao.Properties.Uiname.eq(conditions)).unique();
- 删除(Delete)操作
上一篇讲到的删除操作也只是根据主键进行删除,但是根据其他条件进行删除的话,貌似greenDao没有提供相应的方法,我看了一下源码,即便是删除对象的方法,其根本也是根据主键来删除的。所以这时只能让人想到曲线救国的路线了,那就是根据上面查找单条数据的方法,和删除操作结合起来使用,也就是说对单条数据查询获取到对应主键,然后根据主键进行删除。
具体做法如下:
/**
* 通过其他字段去删除
* 思路是先查询到对应的数据,然后获取该条数据对应的主键,用对应主键进行删除
* @param otherKey
* @return
*/
public static boolean deleteByOtherKey(String otherKey){
TestDb testDb = DataBaseUtils.getDaoSession().getTestDbDao().queryBuilder().where(TestDbDao.Properties.Uiname.eq(otherKey)).unique();
if (testDb != null){
try {
DataBaseUtils.getDaoSession().getTestDbDao().deleteByKey(testDb.getPrimid());
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
以上就是greenDao的简单的查询和删除操作。