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

现在有个需求。需要存入很多数据到数据库中,并且要求加密。于是用到了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();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • (一)GreenDao简介 GreenDao是一个对象关系映射(ORM)的开源框架,目前最主流的安卓数据库操作框架...
    miss2008阅读 5,227评论 4 18
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,724评论 6 342
  • 人从来没有随便成功的,亦如一个人的经验,大多都是由生活中慢慢积累而成。一个人能忍得住多大的寂寞,就会有多...
    叶子77阅读 914评论 0 0