- 导入Gradle插件和Dao代码生成
// 在 Project的build.gradle 文件中添加:
buildscript {
repositories {
...
jcenter()
mavenCentral() // add repository
}
dependencies {
...
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
// 在 Moudle:app的 build.gradle 文件中添加:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
android{
...
greendao {
schemaVersion 1 //版本
daoPackage 'com.example.myapplicationdome.dao' //app包名+生成文件的文件夹名
targetGenDir 'src/main/java' //文件生成路径
}
}
- 创建存储对象实体类
@Entity(nameInDb = "T_dome")
public class DomeBean {
//主键
@Id
private String number;
private String name;
}
在Android Studio中使用Build> Make Project,这个bean会自动生成一些东西
3.封装类
public class GreenDaoContext extends ContextWrapper {
public GreenDaoContext() {
super(Utils.getApp());
}
/**
* 获得数据库路径,如果不存在,则创建对象
*
* @param dbName
*/
@Override
public File getDatabasePath(String dbName) {
//TODO 这里主要是把数据库的存储地址更改成自己的想要存储的目录
String dbDir = Environment.getExternalStorageDirectory()+File.separator+"Android";
LogUtils.e("GreenDaoContext", "数据库地址:" + dbDir);
File baseFile = new File(dbDir);
// 目录不存在则自动创建目录
if (!baseFile.exists()) {
baseFile.mkdirs();
}
//如果需要建立多个库,根据用户之类建立文件夹自行处理
StringBuffer buffer = new StringBuffer();
buffer.append(baseFile.getPath());
dbDir = buffer.toString();
buffer.append(File.separator);
buffer.append(dbName);
String dbPath = buffer.toString();
// 判断目录是否存在,不存在则创建该目录
File dirFile = new File(dbDir);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
// 数据库文件是否创建成功
boolean isFileCreateSuccess = false;
// 判断文件是否存在,不存在则创建该文件
File dbFile = new File(dbPath);
if (!dbFile.exists()) {
try {
isFileCreateSuccess = dbFile.createNewFile();// 创建文件
} catch (IOException e) {
e.printStackTrace();
}
} else {
isFileCreateSuccess = true;
}
//返回数据库文件对象
if (isFileCreateSuccess) {
return dbFile;
} else {
return super.getDatabasePath(dbName);
}
}
/**
* 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
*
* @param name
* @param mode
* @param factory
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
return result;
}
/**
* Android 4.0会调用此方法获取数据库。
*
* @param name
* @param mode
* @param factory
* @param errorHandler
* @see ContextWrapper#openOrCreateDatabase(String, int,
* SQLiteDatabase.CursorFactory,
* DatabaseErrorHandler)
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,
DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
return result;
}
}
public class MyOpenHelper extends DaoMaster.DevOpenHelper {
public MyOpenHelper(String name) {
super(new GreenDaoContext(), name);
}
public MyOpenHelper(String name, SQLiteDatabase.CursorFactory factory) {
super(new GreenDaoContext(), name, factory);
}
@Override
public void onCreate(Database db) {
super.onCreate(db);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
/*
此处不用super,因为父类中包含了
dropAllTables(db, true);
onCreate(db);
需要自己定制升级
*/
LogUtils.e("旧版本:"+oldVersion+" 新版本:"+newVersion);
Set<Class<? extends AbstractDao<?, ?>>> updataCLassSet = new HashSet<>();
for (int version = oldVersion + 1; version