Android 数据库(4)-----GreenDao3

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官方的说法是速度最快,相对性能要求不是很严格的可以自由选择


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值