这个很早以前就用了,那时候依赖的还是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了
总体使用是方便了很多
大家在修改线上的项目的时候,一定要测试好了再发布,注意修改后的兼容问题