GreenDAO 1.+ 升级到 3.2 的代码修改,本地数据库版本号的升级(需要添加新字段)

这个很早以前就用了,那时候依赖的还是1.+的版本,之前是需要建一个java项目在工程中,现在只需要加几个依赖和在Entity中加注释即可

以前的写法:

Schema schema = new Schema(1, "com.xinxin.demo");
Entity userInfo = schema.addEntity("UserInfo");
userInfo.addIdProperty();
userInfo.addStringProperty("nickname");
new DaoGenerator().generateAll(schema, "E:\\input\\porject\\porject\\app\\src\\main\\java-gen");
往下省略N多行,这个是以前的写法,我只是稍微列举下,大家就是看下就可以了,如果你以前用的也是这种写法那就和我的场景差不错

至于GreenDAO3是怎么用的,网上轮子太多,就不敷衍了。

GreenDAO3很好用,省去了很多代码,操作起来非常简单,代码配置也不用写在java项目中了,不用每次都run下main方法去生成需要的类文件,现在是所有的配置直接放在主项目中就可以了,更加一目了然,代码不会太乱

现在的写法:

1、添加依赖

工程的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
        //GreenDao3依赖
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

项目的build.gradle
 apply plugin: 'com.android.application'
//使用greendao
apply plugin: 'org.greenrobot.greendao'

项目的build.gradleandroid {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    //greendao配置
    greendao {
        //版本号,升级时可配置
        schemaVersion 1
        daoPackage 'com.xinxin.demo.db.greendao'//生成的java类文件的存放位置
        targetGenDir 'src/main/java'
    }
}

项目的build.gradle
dependencies {
compile 'org.greenrobot:greendao:3.2.0'//我以前用的是compile 'de.greenrobot:greendao:1.3.7'
}

这些配置好以后,build同步一下,把以前的Entity类复制到你的实体类文件下,之前的这些类都是自动生成的,现在这类属性需要自己写,复制过来以后把构造器、get、set、全删掉

在Entity类上添加注释,列举两个必要的注释,其它大家可以百度,轮子满天飞

@Entity
public class UserInfo {

    @Id
    private Long id;

    private String nickname;
}

一个是@Entity需要在在类名上

一个是@Id表示一个自增的id

需要注意的是类型都必须是封装类,以前是自动生成的大家可能不会太注意这个,现在要自己写,大家不要写错了

这个写好以后先运行一下,会自动根据我们写的实体类生成构造器、get、set方法。

运行后,肯定会报很多错,找到报错的地方,把类中的最上面的导包错误的地方删除,然后重新导包,大部分的错误应该就没有了,有的你应该也很容易修改的,

把 getWritableDatabase() 改成 getWritableDb()

到这里就没什么了,再运行下项目,应该就可以正常操作了,升级后增删改查的操作代码基本没变,数据库操作的代码基本也不用修改多少



第二个就是数据库表升级的问题

比如我们现在需要在表上加个用户头像,直接看代码,更容易懂,我也懒的敲太多的字,有时候讲不清楚反倒适得其反

@Entity
public class UserInfo {

    @Id
    private Long id;

    private String nickname;

    private String avatar;
}


public class UpgradeHelper extends DaoMaster.OpenHelper {
    public UpgradeHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        Log.e("TAG","数据库升级 >> "+oldVersion + "," + newVersion);
        switch (newVersion) {
            case 2:
                DaoMaster.createAllTables(db, true;
                // 加入新字段
                try {
                    db.execSQL("ALTER TABLE 'USER_INFO' ADD 'AVATAR' TEXT;");
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                break;
        }
    }
}


可以了,新老版本有几个修改的地方

引用SQLiteDatabase的地方改成了Database

getWritableDatabase() 改成 getWritableDb()

不再用add,run main了

总体使用是方便了很多

大家在修改线上的项目的时候,一定要测试好了再发布,注意修改后的兼容问题





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值