现在在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 这里可以重复添加文件。
}
}