GreenDao的基本使用以及遇到的坑

来源:互联网 发布:爱国为主题的电影知乎 编辑:程序博客网 时间:2024/06/07 02:01

GreenDao的基本使用以及遇到的坑

  1. 前言
    相比较我上一篇博客Ormlite数据库来说,个人认为GreenDao的易用性强大得多。为什么?接着看。
  2. 配置
    在相应的位置添加上以下下内容,相信大家都懂。
(1)    apply plugin: 'org.greenrobot.greendao'    dependencies {        compile 'org.greenrobot:greendao:3.0.1'        compile 'org.greenrobot:greendao-generator:3.0.0'    }    greendao {      //和buildTypes同位置        schemaVersion 1        daoPackage 'com.xxx.model.greendao.gen'        targetGenDir 'src/main/java'    }    (2)    buildscript {        repositories {            jcenter()            mavenCentral()        }        dependencies {            classpath 'com.android.tools.build:gradle:2.1.0'            classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'        }    }    allprojects {        repositories {            jcenter()        }    }

3.建包
在2中配置了com.xxx.model.greendao.gen,
在com.xxx.model.greendao下建包entity用于存放bean
- class上注释@Entity
- 表id上注释@Id
- 无需记入的数据上注释@Transient
- 然后就可以build-Make Project

@Entitypublic class ErrorInfo {    private String ErrorInfoID;    @Id    private String AddTime;    private String ErrorSource;    private String ErrorDetalisInfo;    @Transient    public List<XX> xxList;       }

4.系统生成
Make Project之后系统自动生成了DaoMaster,DaoSession,GreenDaoManager和对应的dao
生成
5. 相关使用代码

DaoSession session = GreenDaoManager.getInstance().getSession();    addProjectDao = session.getS_AddProjectDao();    addProjects = addProjectDao.loadAll();    QueryBuilder<S_Personal> qb = session.getS_PersonalDao().queryBuilder();    List<S_Personal> list = qb            .where(qb.and(S_PersonalDao.Properties.PersonName.eq(editTextuser.getText().toString())                    ,S_PersonalDao.Properties.PersonPassword.eq(editTextpwd.getText().toString())))            .build().list();    List<S_LoginInfo> s_loginInfos = s_loginInfoDao.queryBuilder().where(S_LoginInfoDao.Properties.PersonID.eq(list.get(0).getPersonID())).build().list();    if (s_loginInfos.size() == 0) {        final S_LoginInfo s_LoginInfo = new S_LoginInfo();        s_LoginInfo.setPersonID(list.get(0).getPersonID());        s_LoginInfo.setLoginTime(CurrentTimes.getCurrentTime());        s_LoginInfo.setWhether("未上传");        s_loginInfoDao.insertOrReplace(s_LoginInfo);    }    开启事务    session.runInTx(new Runnable(){    S_SubwayLineDao dao = session.getS_SubwayLineDao();                    List<S_SubwayLine> lineList = dao.queryBuilder().build().list();                    for (S_SubwayLine s_subwayLine : lineList) {                        dao.deleteInTx(s_subwayLine);                    }                    session.clear();                    for (SubwayLine subwayLine : list) {                        for (Interval interval : subwayLine.getIntervals()) {                            S_SubwayLine s_SubwayLine = new S_SubwayLine();                            s_SubwayLine.setIntervalId(interval.getIntervalId());                            s_SubwayLine.setName(subwayLine.getName());                            s_SubwayLine                                    .setIntervalName(interval.getIntervalName());                            dao.insertOrReplaceInTx(s_SubwayLine);                        }                    }    });

6.使用中出现的坑
1. 查询加遍历,出现第二条查询不到的问题,处理方法如下,循环中queryBuilder();
S_ProjectDao s_projectDao = session.getS_ProjectDao();
for(){
QueryBuilder queryBuilder = s_projectDao.queryBuilder();
}
2. 子线程中数据库开启事务,导致概率性不更新UI的问题。建议能不开启事务,就别开启,或者更新UI重新设计
3.


7.介绍就到这里了,相关代码有空上传。

0 0
原创粉丝点击