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;
        }

    }

你可能感兴趣的:(greenDAO数据库之修改存储地址)