安卓数据库 GreenDao的使用教程

本文介绍安卓项目从0集成greenDao到使用增删改查的方法;
就是这么简洁精炼!!!

直接上步骤

一. 添加引用

  • 1、app下的build.gradle 文件 ,在 dependencies{} 的最后 添加下面引用:
    (请根据SDK编译版本选择使用compile 还是 api 还是 implementation)
implementation 'org.greenrobot:greendao:3.2.2'
  • 2、app下的build.gradle 文件 ,在第一行下面,添加下面一行代码:
apply plugin: 'org.greenrobot.greendao'
  • 3、app下的build.gradle 文件 ,在 android{} 的最后,添加greendao{} 代码快,配置greendao自动生成文件的路径:
	// greendao自定义路径
    greendao {
        schemaVersion 1
        daoPackage 'com.example.mypackage.db.greendao.gen'
        targetGenDir 'src/main/java'
    }
  • 4、项目根目录下的build.gradle文件,在 dependencies{} 中添加如下classpath:
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
  • 5、执行make project 或者按 Ctrl + F9,如果配置的正确,会在配置的greendao.gen目录下生成DaoMaster和DaoSession等文件,就算是成功引入了greendao。
    下面贴一下gradle文件的截图,供参考一下:
    根目录下gradle文件编辑的地方app目录下gradle文件编辑的地方
    【注释:】greendao自定义路径时,
    schemaVersion代表当前数据库的版本,后续需要升级数据库时,修改schemaVersion就可以升级数据库。
    daoPackage 是指定greendao自动生成文件的路径,一般放在包名下的 greendao.gen目录。我在项目中为了便于管理,把数据库的bean类和自动生成的文件都放在包名下的db文件夹。

二、通过GreenDao在本地创建数据库

  • 1、首先创建一个类 DownloadEntity :
  有 @Entity 这个标记的类,greendao才会把它当做字段表解析
@Entity
public class DownloadEntity {
   
	  Id是一个自增的索引,可以排序,可以查找,可以覆盖
    @Id
    Long id;

    /**下载开始的位置*/
    @Property(nameInDb = "startPos")	 用@Property 标记的字段,会被插入数据表
    Long startPos;

    /**下载结束的位置*/
    @Property(nameInDb = "endPos")		  nameInDb 和字段保持一致,也可以不一致
    Long endPos;

    /**是否已经完成*/
    @Property(nameInDb = "hasFinished")
    Boolean hasFinished;

    /**下载链接*/
    @Property(nameInDb = "downloadUrl")
    String downloadUrl;

    /**apk版本号*/
    @Property(nameInDb = "apkVersion")
    String apkVersion;

	  默认构造,各个字段取默认值或空值。 
	  @Generated不需要加(hash = 一个Long型数值)会自动生成
    @Generated
    public DownloadEntity() {
   
    }
	  带参数的构造,可以直接用具体值创建一个对象
    @Generated
    public DownloadEntity(String threadId, Long startPos, Long endPos, Long blockSize,
            Long hasDownSize, Boolean hasFinished, String downloadUrl, String savePath,
            String apkVersion) {
   
        this.startPos = startPos;
        this.endPos = endPos;
        this.hasFinished = hasFinished;
        this.downloadUrl = downloadUrl;
        this.apkVersion = apkVersion;
    }
    ... /// 此处省略get和set方法,还有toString方法,一般都写全最好。
}

上面类中:
有 @Entity 这个标记的类,greendao才会把它当做字段表解析:

@Entity
public class DownloadEntity {

有@Id 标记的是一个主键,可用于排序和查找替换:

	@Id
    Long id;

用@Property 标记的字段,会当作数据表的字段使用,字段取nameInDb的值:

	@Property(nameInDb = "downloadUrl")
    String downloadUrl;

DownloadEntity是被@Entity标记的,所以再次make project的时候,会在greendao.gen目录下新生成DownloadEntityDao文件,里面的 代码都是自动生成,我们不用修改。
文件列表图示

  • 2、新增GreenDao的管理工具类
    为什么要新增管理类呢? 主要为了扩展功能。
    GreenDao自动生成的类中,看一下它的升级功能:
    升级功能
    如图,升级中只有这么一句话:dropAllTables,根据字义可知,就是把老表直接删除,然后创建新表,这么做是十分不可取的,数据直接就丢失了。所以自定义的Greendao管理类主要是解决这个问题。

/**
 * 数据库帮助类
 *      复写了数据库升级的方法,使用MigrationHelper代替本地的升级方法
 */
public class GreenDaoHelper extends DaoMaster.OpenHelper {
   
    public GreenDaoHelper(Context context, String name) {
   
        super(context, name);
    }

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

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   
        if (newVersion > oldVersion) {
   
            try {
   
                /**
                 * 数据库升级操作,因为数据迁移后需要删除所有老表,所有这里要带上所有的Dao.class文件
                 *      如果缺少某个Dao,则该Dao数据会丢失
                 */
                MigrationHelper.migrate(db, DownloadEntityDao.class);
            } catch (Exception e) {
   
                Log.e("Exception:", e.getMessage());
            }
        }
    }
}

MigrationHelper类是从别的地方借鉴的,用了很久了,通用性很强。照抄就行。

/**
 * 数据库升级帮助类:
 *      先建立临时数据表,保存所有数据。
 *      然后清除老数据表,建立新数据表。
 *      最后把数据从临时表中
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值