美文网首页
GreenDao 操作外部数据库绑定

GreenDao 操作外部数据库绑定

作者: 大队辅导猿 | 来源:发表于2019-10-09 10:14 被阅读0次
项目地址 https://github.com/JoneYng/DBDemo.git

一.GreenDao配置:

1.project 下的 build.gradle添加

dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加greendao配置
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' 
    }

2.app 下的 build.gradle添加

apply plugin: 'org.greenrobot.greendao' // greendao 引用

dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // add library
}

3.app 下的 build.gradle android 下添加

greendao {
        schemaVersion 7 //数据库版本
        daoPackage 'com.kmf.gen' //Dao生成所在包名
        targetGenDir 'src/main/java'
    }

二.使用GreenDao关联已有表

1.新建实体类,生成Dao

@Entity(
        nameInDb = "sheet",
        createInDb = false //表示不生成新表
)
public class Sheet

2.自定义数据库路径

public class GreenDaoContext extends ContextWrapper

/**
     * 获得数据库路径,如果不存在,则创建对象
     *
     * @param dbName
     */
    @Override
    public File getDatabasePath(String dbName) {

        // 判断目录是否存在,不存在则创建该目录
        File dirFile = new File(dbPath);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        // 数据库文件是否创建成功
        boolean isFileCreateSuccess = false;
        // 判断文件是否存在,不存在则创建该文件
        File dbFile = new File(dbPath+dbName);
        if (!dbFile.exists()) {
            try {
                isFileCreateSuccess = dbFile.createNewFile();// 创建文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else
            isFileCreateSuccess = true;
        // 返回数据库文件对象
        if (isFileCreateSuccess)
            return dbFile;
        else
            return super.getDatabasePath(dbName);
    }

    /**
     * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
     *
     * @param name
     * @param mode
     * @param factory
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
                                               SQLiteDatabase.CursorFactory factory) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
        return result;
    }

    /**
     * Android 4.0会调用此方法获取数据库。
     *
     * @param name
     * @param mode
     * @param factory
     * @param errorHandler SQLiteDatabase.CursorFactory,
     *                     DatabaseErrorHandler)
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,
                                               DatabaseErrorHandler errorHandler) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
        return result;
    }

3.新建数据库管理类,用于操作数据库的对象

    /**
     * 判断是否存在数据库,如果没有则创建数据库
     * @param dbPath
     * @param dbName
     * @param isUpdate 是否需要升级数据库
     * @return
     */
    public DaoMaster getDaoMaster(String dbPath, String dbName,boolean isUpdate) {
        if (daoMaster == null) {
            if(isUpdate){
                DBHelper helper = new DBHelper(
                        new GreenDaoContext(dbPath), dbName, null);
                daoMaster = new DaoMaster(helper.getWritableDatabase());
            }else{
                DaoMaster.DevOpenHelper helper = new  DaoMaster.DevOpenHelper(
                        new GreenDaoContext(dbPath), dbName, null);
                daoMaster = new DaoMaster(helper.getWritableDatabase());
            }

        }
        return daoMaster;
    }

4.数据库的使用, 本文使用先将数据库文件从assets拷贝到SD卡路径下

 DaoManager.getInstance().closeConnection()
            var daoSession = DaoManager.getInstance().getDaoSession(Configs.GMAT_LOCAL_PATH_ANDROID_DATA, "gmat.sqlite",false)
            var list = daoSession.sheetDao.queryBuilder().build().list()
            Log.i("list", list.toString())

相关文章

网友评论

      本文标题:GreenDao 操作外部数据库绑定

      本文链接:https://www.haomeiwen.com/subject/yqdzectx.html