greendao 的简单实用及配置 更新数据库配置

  1. 导入Gradle插件和Dao代码生成
// 在 Project的build.gradle 文件中添加:
buildscript {
   
    repositories {
   
    	...
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
   
        ...
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}

// 在 Moudle:app的  build.gradle 文件中添加:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
 
dependencies {
   
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}
android{
   
	...
	greendao {
   
            schemaVersion 1 //版本
            daoPackage 'com.example.myapplicationdome.dao' //app包名+生成文件的文件夹名
            targetGenDir 'src/main/java'  //文件生成路径
    }
}
  1. 创建存储对象实体类
@Entity(nameInDb = "T_dome")
public class DomeBean {
   
    //主键
    @Id
    private String number;
    private String name;
}

在Android Studio中使用Build> Make Project,这个bean会自动生成一些东西
3.封装类

public class GreenDaoContext extends ContextWrapper {
   

    public GreenDaoContext() {
   
        super(Utils.getApp());
    }

    /**
     * 获得数据库路径,如果不存在,则创建对象
     *
     * @param dbName
     */
    @Override
    public File getDatabasePath(String dbName) {
   
    	//TODO 这里主要是把数据库的存储地址更改成自己的想要存储的目录
        String dbDir = Environment.getExternalStorageDirectory()+File.separator+"Android";
        LogUtils.e("GreenDaoContext", "数据库地址:" + dbDir);
        File baseFile = new File(dbDir);
        // 目录不存在则自动创建目录
        if (!baseFile.exists()) {
   
            baseFile.mkdirs();
        }
        //如果需要建立多个库,根据用户之类建立文件夹自行处理
        StringBuffer buffer = new StringBuffer();
        buffer.append(baseFile.getPath());
        dbDir = buffer.toString();
        buffer.append(File.separator);
        buffer.append(dbName);
        String dbPath = buffer.toString();
        // 判断目录是否存在,不存在则创建该目录
        File dirFile = new File(dbDir);
        if (!dirFile.exists()) {
   
            dirFile.mkdirs();
        }
        // 数据库文件是否创建成功
        boolean isFileCreateSuccess = false;
        // 判断文件是否存在,不存在则创建该文件
        File dbFile = new File(dbPath);
        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
     * @see ContextWrapper#openOrCreateDatabase(String, int,
     * 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;
    }
}
public class MyOpenHelper extends DaoMaster.DevOpenHelper {
   

    public MyOpenHelper(String name) {
   
        super(new GreenDaoContext(), name);
    }

    public MyOpenHelper(String name, SQLiteDatabase.CursorFactory factory) {
   
        super(new GreenDaoContext(), name, factory);
    }

    @Override
    public void onCreate(Database db) {
   
        super.onCreate(db);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
   
       /*
       此处不用super,因为父类中包含了
       dropAllTables(db, true);
        onCreate(db);
        需要自己定制升级
        */
        LogUtils.e("旧版本:"+oldVersion+"     新版本:"+newVersion);
        Set<Class<? extends AbstractDao<?, ?>>> updataCLassSet = new HashSet<>();
        for (int version = oldVersion + 1; version 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值