您的位置:首页 > 数据库

GreenDao3.0+的配置使用以及数据库升级

2016-10-11 14:21 417 查看
GreenDao是Android中用来处理数据库操作的一个比较好用的ORM框架,使用它可以简化数据库操作的代码,这里记录一下AndroidStudio中使用GreenDao的方式:

(1)配置Greendao插件引入GreenDao的jar包

app目录下的build.gradle文件中添加配置

apply plugin: 'org.greenrobot.greendao'

dependencies {
compile 'org.greenrobot:greendao:3.1.1'
}

工程目录下的build.gradle文件中添加配置

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'org.greenrobot:greendao-gradle-plugin:3.1.1'
}
}
(2)配置DaoMaster,DaoSession和DAOS的生成目录
在app目录下的build.gradle文件中android节点下添加如下配置


<
4000
span style="font-family:SimSun;">greendao{
schemaVersion 1    //数据库版本号,进行数据库升级时使用


}

(3)编写数据库中表对应的实体bean,生成对应的DaoMaster,DaoSession和DAOS。例如:

假设我们需要建一个表用来记录"笔记",我们可以创建这样一个java类

<span style="color:#000000;">package com.thunisoft.zxlz.dao.bean;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;

import java.util.Date;
import org.greenrobot.greendao.annotation.Generated;

/**
* Created by Administrator on 2016-10-10.
*/
@Entity
public class Note {
@Id
private String bh;
@Property(nameInDb = "bt")
private String bt;
@Property(nameInDb = "nr")
private String nr;
@Property(nameInDb = "bxsj")
private Date bxsj;
}</span>

@Id 是指定表的主键。

@Property(nameInDb = "bt") 是指定在表中的字段名就是bt。

点击Android studio开发工具中菜单栏Build下的Make Project就会在你之前(2)指定的目录下生成DaoMaster,DaoSession和DAOS,如下图:



(4)在Application中进行初始化操作

<span style="color:#000000;">package com.thunisoft.zxlz;

import android.app.Application;
import android.database.sqlite.SQLiteDatabase;

import com.thunisoft.zxlz.dao.DaoMaster;
import com.thunisoft.zxlz.dao.DaoSession;

/**
* Created by Administrator on 2016-10-10.
*/
public class MyApplication  extends Application{
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
initDataBase();
}
private void initDataBase() {
DaoMaster.DevOpenHelper devOpenHelper=new DaoMaster.DevOpenHelper(this,"test-db");
SQLiteDatabase db=devOpenHelper.getWritableDatabase();
daoSession=new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}</span>

初始化操作如果我们要使用就可以通过获取Application对象来获取到Daosession以获取到具体某个表的dao来对这个表进行增删改查操作

<span style="color:#000000;">private void test(){
NoteDao noteDao=((MyApplication)getApplication()).getDaoSession().getNoteDao();
Note note=new Note();
note.setBh("1323432");
noteDao.insert(note);</span>
<span style="color:#000000;">}</span>

(5)GreenDao数据库升级,在大多数情况下随着业务的变化,我们之前所创建的表可能也需要改变(比如添加一个字段啥的),这时我们需要考虑到旧数据如何保留的问题。

GreenDao在默认情况下的数据库升级是会将原来的表销毁重新创建的,这在DaoMaster类中的DevOpenHelper中的源码可以看到

<span style="color:#000000;">/** WARNING: Drops all table on Upgrade! Use only during development. */
public static class DevOpenHelper extends OpenHelper {
public DevOpenHelper(Context context, String name) {
super(context, name);
}

public DevOpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory);
}

@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
dropAllTables(db, true);
onCreate(db);
}
}</span>

所以在做数据库升级的时候我们需要修改这部分代码,我们需要做两件事情

a.修改app目录下的build.gradle文件中greendao节点下的schemaVersion加1,重新Build——>Make Project.

b.修改DevOpenHelper中的数据库升级到逻辑代码:创建临时表;将原表中的数据拷贝到临时表;删除原表,将临时表的表名修改为原表的表名。(你可以写个utils啥的,在onUpgrade方法中调用。)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: