import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import com.tbc.android.defaults.app.business.cache.AppUserCache;
import com.tbc.android.defaults.app.utils.AppPathUtil;
import com.tbc.android.mc.storage.ApplicationCache;
import java.io.File;
/**
* Created by Doraemon
* Date: 16/5/12
* Time: 09:22
* Summary:該類(lèi)主要用于基于GreenDao框架自定義數(shù)據(jù)庫(kù)路徑
*/
public class GreenDaoContext extends ContextWrapper {
private String currentUserId;
private Context mContext;
public GreenDaoContext() {
super(ApplicationCache.context);
this.mContext = ApplicationCache.context;
this.currentUserId = AppUserCache.userInfo.getUserId();
}
/**
* 獲得數(shù)據(jù)庫(kù)路徑,如果不存在,則創(chuàng)建對(duì)象
*
* @param dbName
*/
@Override
public File getDatabasePath(String dbName) {
File baseFile = AppPathUtil.getDbCacheDir(mContext);
StringBuffer buffer = new StringBuffer();
buffer.append(baseFile.getPath());
buffer.append(File.separator);
buffer.append(currentUserId);
buffer.append(File.separator);
buffer.append(dbName);
return new File(buffer.toString());
}
/**
* 重載這個(gè)方法垫挨,是用來(lái)打開(kāi)SD卡上的數(shù)據(jù)庫(kù)的,android 2.3及以下會(huì)調(diào)用這個(gè)方法。
*
* @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會(huì)調(diào)用此方法獲取數(shù)據(jù)庫(kù)夜只。
*
* @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;
}
}
自定義一個(gè)context,然后在獲取helper時(shí)蒜魄,將自定義的context傳入扔亥,如下:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(new GreenDaoContext(), "app.db", null);
SQLiteDatabase db = helper.getWritableDatabase();
// 注意:該數(shù)據(jù)庫(kù)連接屬于 DaoMaster场躯,所以多個(gè) Session 指的是相同的數(shù)據(jù)庫(kù)連接。
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();