美文网首页Android
Android 数据库 greenDao 3(包括加密) 封装使

Android 数据库 greenDao 3(包括加密) 封装使

作者: 基本密码宋 | 来源:发表于2017-05-22 13:50 被阅读560次
    现在有个需求。需要存入很多数据到数据库中,并且要求加密。于是用到了GreenDao3.0

    首先各种导库 在moduel中的build.gradle中加入依赖
    并且加入greenDao的配置信息,版本、生成目录地址、包名。

    Paste_Image.png
    然后在项目的builde.gradle中如下配置
    Paste_Image.png
    进行编译项目会自动生成你自定义的目录结构 Paste_Image.png

    下面开始写代码
    在application中初始化GreenDao

    public class DbApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            DBMaster.init(this);
        }
    }
    

    下面是 DBMaster的代码

    /**
     * create by  宋佳  on 2017/5/22 12:34 .
     * 描述 : 数据库管理类     
     */
    
    public class DBMaster {
        public static void init(Context context) {
            DBCore.init(context);
            initDatabase(context);
        }
    
        private static void initDatabase(Context context) {
            DBCore.enableQueryBuilderLog();
        }
    
        /**
         * 得到正常的不加密的
         */
        public static DaoSession getDBNormal() {
            return DBCore.getDaoSessionNormal();
        }
    
        /**
         * 得到加密的
         *
         * @return
         */
        public static DaoSession getDBEncryption() {
            return DBCore.getDoaSessionEncryption();
        }
    }
    

    DBCore 是 初始化 数据库的工具类。里面有具体的注释

    public class DBCore {
        private static final String DEFAULT_DB_NAME = "Green_dao_demo.db";  //数据库名字
        private static final String DEFALLT_DA_PASSWORD = "Green_dao_demo";  //加密数据库的密码
        private static Context mContext;
        private static String mDbName;//得到数据库的名字的字段
        private static DaoMaster mDaoMaster; //数据库的管理者
        private static DaoSession sDaoSession; //此对象是对数据库进行增删改查的
        private static DaoMaster.DevOpenHelper helper;
    
        public static void init(Context context) {
            init(context, DEFAULT_DB_NAME);
        }
    
        private static void init(Context context, String dbName) {
            if (context == null) {
                throw new IllegalArgumentException("出错了");
            }
            mContext = context.getApplicationContext();
            mDbName = dbName;
        }
    
        /**
         * 得到数据库的管理类
         *
         * @return
         */
        private static DaoMaster getDaoMasterNormal() {
            if (helper == null) {
                helper = new MyOpenHelper(mContext, mDbName);
            }
            if (mDaoMaster == null) {
                mDaoMaster = new DaoMaster(helper.getWritableDatabase());
            }
            return mDaoMaster;
        }
    
    
        /**
         * 得到数据库加密的管理类
         * @return
         */
        private static DaoMaster getmDaoMasterEncryption() {
            if (helper == null) {
                helper = new MyOpenHelper(mContext, mDbName);
            }
            if (mDaoMaster == null) {
                mDaoMaster = new DaoMaster(helper.getEncryptedReadableDb(DEFALLT_DA_PASSWORD));
            }
            return mDaoMaster;
        }
    
    
        public static DaoSession getDaoSessionNormal() {
            if (sDaoSession == null) {
                if (mDaoMaster == null) {
                    mDaoMaster = getDaoMasterNormal();
                }
                sDaoSession = mDaoMaster.newSession();
            }
            return sDaoSession;
        }
    
    
        public static DaoSession getDoaSessionEncryption() {
            if (sDaoSession == null) {
                if (mDaoMaster == null) {
                    mDaoMaster = getmDaoMasterEncryption();
                }
                sDaoSession = mDaoMaster.newSession();
            }
            return sDaoSession;
        }
    
    
        /**
         * 在 QueryBuilder 类中内置两个 Flag 用于方便输出执行的 SQL 语句与传递参数的值
         */
        public static void enableQueryBuilderLog() {
            QueryBuilder.LOG_SQL = true;
            QueryBuilder.LOG_VALUES = true;
        }
    
        public static class MyOpenHelper extends DaoMaster.DevOpenHelper {
            public MyOpenHelper(Context context, String name) {
                super(context, name);
            }
        }
    }
    
    

    新建实体类 作为存入数据库的对象

    @Entity
    public class LoginBean {
        private String name;
        private int age;
        private String love;
        private String p;
        //省略 set get   
    
    }
    

    还有很多的注解方式,后期在看

    增生改查 用工厂模式

    /**
     * create by  宋佳  on 2017/5/22 12:00 .
     * 描述 : 数据库工厂
     */
    
    public class DaoFactory {
    
        private static DaoFactory mInstance = null;
    
        /**
         * 获取DaoFactory的实例
         *
         * @return
         */
        public static DaoFactory getInstance() {
            if (mInstance == null) {
                synchronized (DaoFactory.class) {
                    if (mInstance == null) {
                        mInstance = new DaoFactory();
                    }
                }
            }
            return mInstance;
        }
       /**
          * 得到登录数据操作db
          *
          * @return
          */
         public Loginable getLoginDB() {
             return new LoginImpl();
         }
    }
    

    登录的接口类和实现类

    /**
     * create by  宋佳  on 2017/5/22 13:18 .
     * 描述 :登录数据操作接口
     */
    
    public interface Loginable {
        /**
         * 插入单个数据
         *
         * @param bean
         */
        void insert(LoginBean bean);
    
        /**
         * 批量插入
         *
         * @param beanList
         */
        void insertList(List<LoginBean> beanList);
    
        /**
         * 删除所有的数据
         */
        void delete();
    
    
        /**
         * 查询所有的数据
         */
        List<LoginBean> findLoginDataAll();
    
        /**
         * 改数据
         */
        void updateLoginData(LoginBean bean);
    
    }
    
    

    实现类

    /**
     * create by  宋佳  on 2017/5/22 13:21 .
     * 描述 :登录数据接口实现类
     */
    
    public class LoginImpl implements Loginable {
    
    
        private LoginBeanDao db;
    
        public LoginImpl() {
           db = DBMaster.getDBNormal().getLoginBeanDao(); ///得到不加密数据库操作对象
        }
    
        @Override
        public void insert(LoginBean bean) {
            db.insert(bean);
        }
    
        @Override
        public void insertList(List<LoginBean> beanList) {
            db.insertInTx(beanList);
        }
    
        @Override
        public void delete() {
            db.deleteAll();
        }
    
        @Override
        public List<LoginBean> findLoginDataAll() {
            return db.queryBuilder().list();
        }
    
        @Override
        public void updateLoginData(LoginBean bean) {
            db.insertOrReplace(bean);
        }
    
    }
    

    具体的调用

      //插入数据
            Loginable db = DaoFactory.getInstance().getLoginDB();
            LoginBean loginBean = new LoginBean();
            loginBean.setAge(111);
            loginBean.setLove("dd");
            loginBean.setName("dd");
            loginBean.setP("ddd");
            db.insert(loginBean);
            //查询
            List<LoginBean> bean = db.findLoginDataAll();
            //删除
            db.delete();
    

    相关文章

      网友评论

        本文标题:Android 数据库 greenDao 3(包括加密) 封装使

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