美文网首页安卓
自定义Android ORM 框架greenDAO数据库文件的路

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

作者: 镜花水月一梦不觉 | 来源:发表于2016-05-18 19:28 被阅读3838次
    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();
    

    相关文章

      网友评论

      • Yufee:在外部存储上建文件的话6.0以上需要申请权限的吧
        镜花水月一梦不觉:嗯,这不是本文的重点,如果api 23可以自行处理
      • 王而安:SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
        出现SQLiteCantOpenDatabaseException: Could not open database异常,博主。
        镜花水月一梦不觉:你的路径不对吧
      • wbBin:AppPathUtil 类的内容发一下 大神
        镜花水月一梦不觉:这种类没必要一样啊,你只要换成你自己的数据库存储路径就行了

      本文标题:自定义Android ORM 框架greenDAO数据库文件的路

      本文链接:https://www.haomeiwen.com/subject/hkvwrttx.html