美文网首页
Android-greenDAO的学习使用

Android-greenDAO的学习使用

作者: 夏_Leon | 来源:发表于2018-07-17 09:48 被阅读0次

    一、常用查询

    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。

    相关文章

      网友评论

          本文标题:Android-greenDAO的学习使用

          本文链接:https://www.haomeiwen.com/subject/dxejpftx.html