关于android数据库框架,有很多种,各有各的优势。 先来看一个图 ,但对于批量查询操作,性能最优的莫过于greendao了。今天来说说关于它简单的使用方式。 在3.0以前,还需要用一个java项目来生成session和dao类。但是从3.0开始,则使用编译时注解,在编译时就生成了,方便了很多。 1. 配置gradle dependencies { // This is only needed if you want to use encrypted databases // compile 'net.zetetic:android-database-sqlcipher:3.5.4'//加密用的,这里暂时不用,内部没有64位的包 //greendao compile 'org.greenrobot:greendao:3.2.0' } greendao { //greendao数据库版本,如果不配置此选项,默认为1 schemaVersion 1 }
2. 创建映射的model,也就是数据表映射类,对象里面的数据则为表字段
这样则能够生成一张Config表,字段有id,telephone,age。 3. 使用 1) application(APP)中,加入全局session初始化。
/** * 是否加密数据库. */ public static final boolean ENCRYPTED = false; private static DaoSession daoSession; private final String DB_ENCRYPIED_NAME = "encrypied_db"; private final String DB_NAME = "normal_db"; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate();//初始化session DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? DB_ENCRYPIED_NAME : DB_NAME);// Database db = ENCRYPTED ? helper.getEncryptedWritableDb(getResources().getString(R.string.db_psw)) : helper.getWritableDb();//如果使用了加密,则需要用密码打开 Database db = helper.getWritableDb(); daoSession = new DaoMaster(db).newSession();//获取到daoSession,用于后续操作 } /** * 请求DaoSession * * @return */ public static DaoSession getDaoSession() { return daoSession; }2)
插入insertConfigDao configDao = APP.getDaoSession().getConfigDao();Config config=new Config(null, 1111111111, 11);configDao.insert(config);//加入删除deleteAPP.getDaoSession().getConfigDao().deleteAll();//这样子删除全部条目,也可以删除单个。delete(T entity)。查 query//查的方式就很多了,这是查全部,放进listConfigDao configDao = APP.getDaoSession().getConfigDao(); List<Config> configs = configDao.queryBuilder().build().forCurrentThread().list();//线程安全 if (configs != null && configs.size() != 0) { return configs.get(0);//取第一个 }//按条件查找//eqdao.queryBuilder().where(Dao.propertys.字段.eq("为什么").unique();//unique得到唯一对象//likedao.queryBuilder().where(Dao.propertys.字段.like("值%").list();//like来用于通配符查找,返回集合//betweendao.queryBuilder().where(Dao.propertys.字段.between(20,30).list();//该字段下,在20到30之间的集合//gt==》大于dao.queryBuilder().where(Dao.propertys.字段.gt(20).list();//该字段下,在20之后的集合//lt==》小于dao.queryBuilder().where(Dao.propertys.字段.lt(20).list();//该字段下,在20之下的集合//notEq==》不等于dao.queryBuilder().where(Dao.propertys.字段.notEq(20).list();//该字段下,不等于20的集合//ge==》大于等于dao.queryBuilder().where(Dao.propertys.字段.ge(20).list();//该字段下,大于等于20的集合//orderAscdao.queryBuilder().where(Dao.propertys.字段.eq("为什么").orderAsc(Dao.Properties.字段).list();//该字段等值后再升序排序改 update//获取到dao操作类ConfigDao configDao = APP.getDaoSession().getConfigDao();//查找到要更改的对象Config config=configDao.queryBuilder().build().forCurrentThread().list().get(0);config.setAge(00);//重新设置值configDao.update(config);//更改数据库具体查看官方api,因为查询用的最多,所以这里查询讲得多一点。
解决办法只需要在混淆文件中加入下面代码即可:
#greendao3.2.0,此是针对3.2.0,如果是之前的,可能需要更换下包名-keep class org.greenrobot.greendao.**{*;}-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {public static java.lang.String TABLENAME;}-keep class **$Properties新闻热点
疑难解答