一、修改app中build.gradle的greendao的配置的schemaVersion
greendao {
//指定数据库schema版本号,迁移等操作会用到
schemaVersion 1
//通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
daoPackage 'com.companyName.projectName.dao'
/*这就是我们上面说到的自定义生成数据库文件的目录了,
可以将生成的文件放到我们的java目录中,
而不是build中,这样就不用额外的设置资源目录了*/
targetGenDir 'src/main/java'
}
二、修改实体类
添加或删除实体类的属性
@Entity
public class User {
@Id
private Long id;
@Property
private String userName;
@Property
private String password;
@Property
private String email;//新增属性
}
一般的数据库升级这样就可以了,特殊情况可能需要自己编写数据库迁移脚本,这种时候可以自定义DBHelper,定义方式如下,注意继承类:
public class DBHelper extends DaoMaster.OpenHelper{
public DBHelper(Context context, String name) {
super(context, name);
}
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onCreate(Database db) {
super.onCreate(db);
}
//在onUpgrade的方法里重写自己的代码
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
super.onUpgrade(db, oldVersion, newVersion);
}
}
可以在onUpgrade方法中进行数据库的迁移,如果自定义了DBHelper,则数据库的初始化变为如下方式:
public class DBManager {
private DaoMaster daoMaster;
//此处换成DBHelper
private DBHelper helper;
//private DaoMaster.DevOpenHelper helper;
private DaoSession daoSession;
private SQLiteDatabase db;
private static DBManager instance;
public static DBManager getInstance() {
if (instance == null) {
instance = new DBManager();
}
return instance;
}
private void initDB(Context context) {
helper = new DBHelper(context, "yourDatabaseName", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
public DaoSession getDaoSession(Context context) {
if (daoSession == null) {
initDB(context);
}
return daoSession;
}
}