greenDAO資料庫之修改儲存地址
傳送門-->索引
一、DaoMaster.DevOpenHelper
在建立 DaoMaster.DevOpenHelper例項的時候如果第一個引數傳的是app的context,那麼資料庫的儲存地址和應用是在同一個包下。
DaoMaster.DevOpenHelper mHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
二、修改context
如果想要修改db的位置,就必須修改這個context,程式碼如下;-)
DaoMaster.DevOpenHelper = = new DaoMaster.DevOpenHelper(new DaoManager.GreenDaoContext(context), DB_NAME, null);
public static class GreenDaoContext extends ContextWrapper {
private String currentUserId = "greendao";//一般用來針對一個使用者一個資料庫,以免資料混亂問題
private Context mContext;
public GreenDaoContext(Context context) {
super(context);
this.mContext = context;
}
/**
* 獲得資料庫路徑,如果不存在,則建立物件
*
* @param dbName
*/
@Override
public File getDatabasePath(String dbName) {
String dbDir = Environment.getExternalStorageDirectory().getPath();
if (TextUtils.isEmpty(dbDir)){
Log.e("SD卡管理:", "SD卡不存在,請載入SD卡");
return null;
}
File baseFile = new File(dbDir);
// 目錄不存在則自動建立目錄
if (!baseFile.exists()){
baseFile.mkdirs();
}
StringBuffer buffer = new StringBuffer();
buffer.append(baseFile.getPath());
buffer.append(File.separator);
buffer.append(currentUserId);
dbDir = buffer.toString();// 資料庫所在目錄
buffer.append(File.separator);
// buffer.append(dbName+"_"+currentUserId);//也可以採用此種方式,將使用者id與表名聯絡到一塊命名
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 android.content.ContextWrapper#openOrCreateDatabase(java.lang.String, int,
* android.database.sqlite.SQLiteDatabase.CursorFactory,
* android.database.DatabaseErrorHandler)
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
return result;
}
}
相關文章
- Android資料儲存之GreenDao 3.0 詳解Android
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 修改MySQL資料庫儲存位置datadirMySql資料庫
- Sqlserver資料庫儲存路徑的修改SQLServer資料庫
- IOS資料儲存之Sqlite資料庫iOSSQLite資料庫
- IOS資料儲存之FMDB資料庫iOS資料庫
- 《資料儲存》之《分庫,分表》
- 修改SQL Server資料庫地址SQLServer資料庫
- Android資料儲存之SQLCipher資料庫加密AndroidSQL資料庫加密
- 資料庫表設計之儲存引擎資料庫儲存引擎
- CentOS修改Mariadb資料庫檔案儲存路徑CentOS資料庫
- 列式儲存資料庫資料庫
- Hive之 資料儲存Hive
- Android資料庫框架——GreenDao初探Android資料庫框架
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- MySQL 資料庫儲存引擎MySql資料庫儲存引擎
- 資料庫儲存過程資料庫儲存過程
- 分散式系統技術:儲存之資料庫分散式資料庫
- 分散式文件儲存資料庫之MongoDB索引管理分散式資料庫MongoDB索引
- 分散式文件儲存資料庫之MongoDB副本集分散式資料庫MongoDB
- Docker最全教程——資料庫容器化之持久儲存資料(十一)Docker資料庫
- 儲存資料之SharedPreference
- IOS資料儲存之NSUserDefaultsiOS
- k8s之資料儲存-配置儲存K8S
- IOS資料儲存之檔案沙盒儲存iOS
- mysql資料庫安裝及預設儲存路徑修改方法MySql資料庫
- Android中的資料儲存之檔案儲存Android
- k8s之資料儲存-高階儲存K8S
- 分散式文件儲存資料庫之MongoDB分片叢集分散式資料庫MongoDB
- 分散式文件儲存資料庫之MongoDB訪問控制分散式資料庫MongoDB
- Oracle資料庫儲存結構之間的關係Oracle資料庫
- 報表資料分庫儲存
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- gitlab資料庫儲存位置Gitlab資料庫
- 使用Room持久庫儲存資料OOM
- 管理資料庫儲存結構資料庫
- 儲存與資料庫系統資料庫