zoukankan      html  css  js  c++  java
  • Android 自定义Android ORM 框架greenDAO数据库文件的路径

    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();
  • 相关阅读:
    在插入一条记录后 取得自动增长ID
    hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些
    单例模式
    聚簇索引与非聚簇索引的区别
    基于SQL SERVER2008的SCCM2007部署
    XML架构下的表结构设置主键
    IE6与IE7下一点样式的区别
    Session丢失原因与解决方案小结
    Python_如何去除字符串里的空格
    Python_让人脑阔疼的编码问题(转)+(整理)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9105358.html
Copyright © 2011-2022 走看看