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。

上一篇下一篇

猜你喜欢

热点阅读