Android 数据库(4)-----GreenDao3
GreenDao3加密(4)1.gradle配置配置过程参考官方: https://github.com/greenrobot/greenDAO根目录下的gradlebuildscript {repositories {jcenter()mavenCentral()//addone}dependencies {
GreenDao3 加密
1.gradle配置
配置过程参考官方: https://github.com/greenrobot/greenDAO
根目录下的gradle
buildscript {
repositories {
jcenter()
mavenCentral() //add one
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' //add two
}
}
app模块下的gradle
apply plugin: 'org.greenrobot.greendao' //add three
compile 'org.greenrobot:greendao:3.2.2' //add four
//一些配置文件,决定了数据库版本和自动生成类的信息
greendao{
schemaVersion 1 //数据库版本
daoPackage 'com.example.leo.myapplication.greendao.gen' //自动生成类的包名
targetGenDir 'src/main/java' //自动生成类的路径
}
2.创建javabean类
//@Entity表明该类是持久化的类
@Entity
public class User {
//@Id选择一个long或Long类型的属性作为该实体所对应数据库中数据表的主键
@Id(autoincrement = true)
private long id;
private String name;
private int age;
//下面两个方法构造方法是自动生成的 用@Generated来注解了
@Generated(hash = 446251977)
public User(long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Generated(hash = 586692638)
public User() {
}
... // getter setter toString方法
}
创建完javabean后直接从新编译一次就会在我们指定的路径下生成三个类
3.CURD
数据库的初始化操作,我这里简单实践就直接写在了onCreate()中
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this , "user.db"); //数据库名称
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
userDao = daoSession.getUserDao(); //后面就使用这个变量进行CURD
Create
//注意按照下面这个方法很容易发生异常,因为主键冲突了
User user = new User(1, "leo" , 18);
userDao.insert(user);
//通过主键检查我们要插入的数据是否重复,当数据库没有时我们再进行插入
User user = new User(1,"leo" , 18);
if(userDao.queryBuilder().where(UserDao.Properties.Id.eq(1)).list().size() == 0 ){
userDao.insert(user);
}
Updata
//检查数据库中是否存在要升级的数据,当返回的结果不为null
List<User> findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("leo")).build().list();
if(findUser != null){
for(int i = 0 ; i < findUser.size();i++) {
findUser.get(i).setName("cat");
userDao.update(findUser.get(i));
Log.e(TAG, "onClick: " + "update ok");
}
}
Delete
User findUser1 = userDao.queryBuilder().where(UserDao.Properties.Name.eq("leo")).build().unique();
if(findUser1 != null){
userDao.deleteByKey(findUser1.getId());
Log.e(TAG, "onClick: "+"remove ok" );
}
Retrieve
List<User> lists = userDao.queryBuilder()
.where(UserDao.Properties.Id.notEq(999)) //主键不等于999
.orderAsc(UserDao.Properties.Id) //返回结果通过注解排序
.limit(5) //只返回前面5条数据
.build().list();
for(int i = 0 ; i < lists.size() ; i++){
Log.e(TAG, "onClick: "+lists.get(i).toString() );
}
4.加密
官方地址 : http://greenrobot.org/greendao/documentation/database-encryption/
添加依赖到gradle
compile 'net.zetetic:android-database-sqlcipher:3.5.7@aar'
数据库初始化变动一行代码
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this , "user.db");
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getEncryptedReadableDb("leo is sun")); //改动后,getEncryptedReadableDb的参数是密码
//DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase()); 改动前
DaoSession daoSession = daoMaster.newSession();
userDao = daoSession.getUserDao();
Litepal和GreenDao3相同点
都是基于SQLite的ORM的的数据库
存在配置文件,litepal存在litepal.xml文件,Greendao在gradle里面直接配置
可以进行数据加密
Litepal和GreenDao3差异
Litepal的加密支持AES和MD5 , 使用AES可以解密出内容,使用MD5无法解密,但是加密后的内容通过sqlite3可以查看,但是GreenDao3使用了加密就无法查看数据库信息,包括几个表也无法查看
大小,greendao-3.2.0.jar的大小是136kb,litepal-1.6.0.jar的大小是176kb相对来说greendao体积更小
greendao官方的说法是速度最快,相对性能要求不是很严格的可以自由选择
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)