GreenDao数据库带你出坑
现在在Android中使用的数据库一般都是用的GreenDao,我们准备使用GreenDao的时候从网上看了很多文章,感觉很多技术点都不是我们关注的重点,经过实践以后觉得好多文章的内容都不太正确。我的这篇文章主要讲GreenDao的三个方面:
1 GreenDao第三方包的引入
2 GreenDao数据加密 数据库存放地址
3 GreenDao数据库升级
- 1 在Android Studio中导入GreenDao的包:
设置仓库与插件(Project: build.gradle):这个需要注意是在Project中的gradle文件中设置
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.2' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin } }
配置依赖 ( Module:app build.gradle ):这个是在应用App下面的中的gradle文件中设置
apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao' // apply plugin dependencies { compile 'org.greenrobot:greendao:3.2.2' // add library compile 'net.zetetic:android-database-sqlcipher:3.5.7@aar'//加密库依赖(数据库升级时使用) }
好了,这就把GreenDao要使用的包都导入进了。
- 2 导入这个“net.zetetic:android-database-sqlcipher:3.5.7@aar”数据库加密包主要是为了数据库升级的时候使用的。 其实如果你不用数据库升级的话,可以不用导入这个包。
(如果不手动设置的话会自己生成在这个目录中)
接下来设置一下数据生成的目录:
greendao { schemaVersion 4//数据库版本号 daoPackage 'com.min.mygreendao.db.gen'//设置DaoMaster、DaoSession、Dao包名 targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 //targetGenDirTest:设置生成单元测试目录 //generateTests:设置自动生成单元测试用例 }
接下来就是得到DaoSession 对象对数据进行操作。其实操作无非是增删改查之类的,这些在网上有很多介绍,这里就不做介绍了。在MySQLiteOpenHelper的第二个参数中可以传递数据库地址,在开发测试环境的时候可以放到data目录中,使用不加密的数据,方便自己查看数据库。上线时改成加密数据库即可。
// DaoMaster.DevOpenHelper mHelper = new DaoMaster.DevOpenHelper(this, getDbPath(), null); //第二个参数可以设置数据库的地址 MySQLiteOpenHelper mHelper = new MySQLiteOpenHelper(this,getDbPath(),null); // SQLiteDatabase db = mHelper.getWritableDatabase(); //加密 Database db = mHelper.getEncryptedWritableDb("1234"); DaoMaster mDaoMaster = new DaoMaster(db); DaoSession mDaoSession = mDaoMaster.newSession(); UserDao userDao = mDaoSession.getUserDao(); User user=new User(); user.setName("李四"); user.setYear(10); userDao.save(user); List<User> users = userDao.loadAll(); textView.setText(users.get(0).getName());
- 3 其实数据库升级很简单,其他很多文章都说的太复杂了,只需要添加两个文件到项目中就可以直接使用。
这俩个类的下载地址这两个类的下载地址
MigrationHelper这个类主要是进行数据升级使用的。可惜不是我写的,而是一个外国大神写的。如果升级数据库的话,只需要把GreenDao生成的文件数据添加到这个方法里面的参数即可。
/** * Created by Administrator on 2017/9/13. * * @des 数据库升级 */ public class MySQLiteOpenHelper extends DaoMaster.OpenHelper { public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { super(context, name, factory); } @Override public void onUpgrade(Database db, int oldVersion, int newVersion) { MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() { @Override public void onCreateAllTables(Database db, boolean ifNotExists) { DaoMaster.createAllTables(db, ifNotExists); } @Override public void onDropAllTables(Database db, boolean ifExists) { DaoMaster.dropAllTables(db, ifExists); } }, UserDao.class,TestDao.class);//, UserDao.class 这里可以重复添加文件。 } }
#### 好了,这样的话GreenDao的很多问题都已经解决了,接下来就让我们愉快的在项目中添加这个数据库包吧。如果使用中有什么问题可以给我留言。源代码下载地址