首先Realm数据库是基于C++编写的一个不同于SQLite数据库的数据库引擎,我之所以找到Realm数据库也是因为网上找一些资料来对SQLite进行加密的办法,但是事与愿违!
我相信对SQLite文件进行加密的办法肯定是有的,只是很难找到而已!我曾经也想出一个办法那就是试试监控app程序是否在运行或者在后台运行,当处于后台或者处于未运行时对原SQLite文件进行加密保存下来,然后在app启动的时候进行解密到一个位置进行业务操作!这里面我们可以利用AlarmManager对象来进行定时任务,一旦程序启动就会开启循环定时任务,一点加密结束停止定是唤醒任务!
言归正传,我们都知道想想中的是美好的,就是会遇到很多问题!
Realm数据库则会帮我本身支持AES-256加密,所以我后来放弃了上面的想法 ,
Realm官方地址https://realm.io/cn/docs/java/latest/
有中文版本的,所以阅读起来也很方便!
1、集成Realm-plugin
在项目目录下的build.gradle中添加
classpath "io.realm:realm-gradle-plugin:1.0.0"
2、在集成的model下的build.gradle添加支持apply plugin: 'realm-android'3、就开始编写代码部分了,配置自己的Realm数据库!
RealmConfiguration是一个队Realm数据库进行配置的类,例如版本号,加密的密钥等等属性!
这是一个设置的阳历,在这里我需要说明一下那个key是一个字节数组,而且长度必须是64的,所以我用一个base64加密之后的字符串进行保存这个密钥,也就是说这个密钥原本就是一个字节数据
4、编写一个实体类,进行操作数据,这个实体类和一般的bean没什么区别,但是需要继承RealmObject
public class User extends RealmObject{ @PrimaryKey private String name; private int age; private String detail; private String job; public String getDetail() { return detail; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", detail='" + detail + '\'' + ", job='" + job + '\'' + '}'; } public void setDetail(String detail) { this.detail = detail; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}5、操作realm插入数据
这里说明一下主键的问题!目前我没有找到自增的办法,但是一般客户端保存服务器数据是不需要自己的主键的,用服务器的主键就行了!