一、 目前APP数据存储方式
OS | 存储方式 | 特点 | 描述 |
---|---|---|---|
Android | SQLite | 容量大,内存占用小,并发高,访问复杂 | 轻型数据库系统 |
Android | SharedPreferences | 轻量数据,结构简单,访问便捷 | 基于XML文件存储的key-value键值对数据 |
Android | 文件存储 | 图形、动态算法等文件存储,访问复杂 | 文件IO流 |
Android | contentProvider、网络存储 | 共享数据、访问简单 | 跨应用、云存储 |
二、主流框架
主流框架 | android:SQLiteOrmLite(jdbc);SQLite、Active Android 、 GreenDAO;Realm、SugarORM; |
---|---|
性能 | MVCC数据库,API调用方法简化,相较传统DB(链接 - 查询 - 命中 - 内存拷贝 - 对象序列化)的复杂过程,不是在SQLite基础上的ORM,数据查询引擎,realm速度快一个量级(基于内存映射的Zero-Copy技术)。而且内部采用了类似git的对象版本管理机制,多线程并发操作,自动化处理存储冲突。易于移植,支持JSON,数据变更通知等高级特性。 |
可视化 | 1)android:Stetho+chrome:build.gradle中添加repositories 和 compile添加依赖包->initialize初始化->Chrome浏览器输入chrome://inspect/#device->inspect->Resources |
安全性 | 安全性,支持加密,格式化查询,流式api |
三、Android应用集成Realm
/**
*增
*/
//(1)子线程事务操作
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
SlideCat cat= realm.createObject(SlideCat.class);
cat.setIndex(1);
cat.setUv("blackcat.png");
cat.sound("angry.ogg");
}
});
//(2)子线程事务操作
final SlideCat cat= realm.createObject(SlideCat.class);
cat.setIndex(1);
cat.setUv("blackcat.png");
cat.sound("angry.ogg");
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//realm.copyToRealm(cat)//无主键
realm.copyToRealmOrUpdate(cat);//有主键
}
});
//(3)子线程事务操作
mRealm.beginTransaction();//开启事务
SlideCat cat= realm.createObject(SlideCat.class);
cat.setIndex(1);
cat.setUv("blackcat.png");
cat.sound("angry.ogg");
mRealm.commitTransaction();//提交事务
/**
*查
*/
//(1)遍历
RealmResults<SlideCat> catList = mRealm.where(SlideCat.class).findAll();
//(2)异步任务
//查询第一只黑猫
RealmResults<SlideCat> catList = mRealm.where(SlideCat.class)
.equalTo("1","blackcat")
.findAllAsync();
//(3)排序
RealmResults<SlideCat> catList = mRealm.where(SlideCat.class) .findAll();
catList = result.sort("index"); //根据索引,正序排列
catList = result.sort("index", Sort.DESCENDING);//逆序排列
/**
*删
*/
//(1)deleteFromRealm()
//先查找到数据
final RealmResults<SlideCat > catList = mRealm.where(SlideCat.class).findAll();
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
catList.get(0).deleteFromRealm();
}
});
//(2)deleteFromRealm(int index)
//先查找到数据
final RealmResults<SlideCat > catList = mRealm.where(SlideCat.class).findAll();
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
catList.deleteFromRealm(0);
}
});
//(3)更多
catList.deleteFirstFromRealm(); //删除user表的第一条数据
catList.deleteLastFromRealm();//删除user表的最后一条数据
RealmResults<SlideCat> cats = realm.where(SlideCat.class).findAll();
cats.deleteAllFromRealm();//删除user表的全部数据
/**
*改
*/
//(1)
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//先查找到更新对象
SlideCat cat = mRealm.where(SlideCat.class).findFirst();
cat.setUv("whitecat.png");
cat.setSound("smile.ogg")
}
});
//(2)先查找到数据
final RealmResults<SlideCat > catList = mRealm.where(SlideCat.class).findAll();
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
SlideCat cat = catList.get(0);
cat.setUv("whitecat.png");
cat.sound("smile.ogg");
});