Android 自定义Android ORM 框架greenDAO数据库文件的路径

本文介绍了一种基于GreenDao框架自定义数据库路径的方法。通过继承ContextWrapper并重写getDatabasePath方法,实现了根据当前用户ID动态指定数据库位置的功能。
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:该类主要用于基于GreenDao框架自定义数据库路径
 */
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();
    }

    /**
     * 获得数据库路径,如果不存在,则创建对象
     *
     * @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());
    }

    /**
     * 重载这个方法,是用来打开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;
    }

}

自定义一个context,然后在获取helper时,将自定义的context传入,如下:

 

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(new GreenDaoContext(), "app.db", null);
SQLiteDatabase db = helper.getWritableDatabase();
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();

 

转载于:https://www.cnblogs.com/zhujiabin/p/9105358.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值