一.GreenDao配置:
1.project 下的 build.gradle添加
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加greendao配置
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
2.app 下的 build.gradle添加
apply plugin: 'org.greenrobot.greendao' // greendao 引用
dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
3.app 下的 build.gradle android 下添加
greendao {
schemaVersion 7 //数据库版本
daoPackage 'com.kmf.gen' //Dao生成所在包名
targetGenDir 'src/main/java'
}
二.使用GreenDao关联已有表
1.新建实体类,生成Dao
@Entity(
nameInDb = "sheet",
createInDb = false //表示不生成新表
)
public class Sheet
2.自定义数据库路径
public class GreenDaoContext extends ContextWrapper
/**
* 获得数据库路径,如果不存在,则创建对象
*
* @param dbName
*/
@Override
public File getDatabasePath(String dbName) {
// 判断目录是否存在,不存在则创建该目录
File dirFile = new File(dbPath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
// 数据库文件是否创建成功
boolean isFileCreateSuccess = false;
// 判断文件是否存在,不存在则创建该文件
File dbFile = new File(dbPath+dbName);
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 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;
}
3.新建数据库管理类,用于操作数据库的对象
/**
* 判断是否存在数据库,如果没有则创建数据库
* @param dbPath
* @param dbName
* @param isUpdate 是否需要升级数据库
* @return
*/
public DaoMaster getDaoMaster(String dbPath, String dbName,boolean isUpdate) {
if (daoMaster == null) {
if(isUpdate){
DBHelper helper = new DBHelper(
new GreenDaoContext(dbPath), dbName, null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}else{
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(
new GreenDaoContext(dbPath), dbName, null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
}
return daoMaster;
}
4.数据库的使用, 本文使用先将数据库文件从assets拷贝到SD卡路径下
DaoManager.getInstance().closeConnection()
var daoSession = DaoManager.getInstance().getDaoSession(Configs.GMAT_LOCAL_PATH_ANDROID_DATA, "gmat.sqlite",false)
var list = daoSession.sheetDao.queryBuilder().build().list()
Log.i("list", list.toString())
网友评论