现在有个需求。需要存入很多数据到数据库中,并且要求加密。于是用到了GreenDao3.0
首先各种导库 在moduel中的build.gradle中加入依赖
并且加入greenDao的配置信息,版本、生成目录地址、包名。
然后在项目的builde.gradle中如下配置
进行编译项目会自动生成你自定义的目录结构
下面开始写代码
在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();