由于项目需要,需要保证删除app时保留数据库信息。
需要设置本地数据库文件到data外部。(保存db文件到sd卡 或者 本机)
当前项目本地数据库使用room。代码实现默认没有设置数据库文件的存储位置。
private fun buildDatabase(appContext: Context, executors: AppExecutors): AppDatabase {
return Room.databaseBuilder(appContext, AppDatabase::class.java, DATABASE_NAME).addCallback(object : RoomDatabase.Callback() {})
.allowMainThreadQueries()
//允许在主线程查询数据
.addMigrations()
//迁移数据库使用,下面会单独拿出来讲
.build()
}
百度了很多资料,
一般搜索出来的是
/data/data/目录中
public class DBHelper {
//得到SD卡路径
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/joke";
private final Activity activity;
//数据库名
private final String DATABASE_FILENAME;
public DBHelper(Context context) {
// TODO Auto-generated constructor stub
//这里直接给数据库名
DATABASE_FILENAME = "jokebook.db3";
activity = (Activity)context;
}
看这个搜索结果人都有些无奈了。
最多就是有人提到openHelperFactory这个方法
但是这个方法的具体实现感觉很复杂,不知道怎么实现。
项目中本地数据库记入的数据,需要数据回流服务器用来对账用的。所以要保证本地数据库数据不能被清除。
我知道greendao和纯sqlite是可以设置db文件到外部的(android本机 或者 sd卡中)
但是room这个框架怎么设置就抓瞎了。