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数据库带你出坑
接下来设置一下数据生成的目录:

greendao {
    schemaVersion 4//数据库版本号
    daoPackage 'com.min.mygreendao.db.gen'//设置DaoMaster、DaoSession、Dao包名
    targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
    //targetGenDirTest:设置生成单元测试目录
    //generateTests:设置自动生成单元测试用例
}

GreenDao数据库带你出坑
接下来就是得到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 其实数据库升级很简单,其他很多文章都说的太复杂了,只需要添加两个文件到项目中就可以直接使用。

这俩个类的下载地址这两个类的下载地址
GreenDao数据库带你出坑
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的很多问题都已经解决了,接下来就让我们愉快的在项目中添加这个数据库包吧。如果使用中有什么问题可以给我留言。源代码下载地址

相关推荐