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

来源:互联网 发布:美工刀片型号 编辑:程序博客网 时间:2024/06/06 05:20

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

//检查数据库中是否存在要升级的数据,当返回的结果不为nullList<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
原创粉丝点击