Realm 数据库的简单使用
Realm 出来这么久了,一直没时间巩固,今天就花点时间巩固下吧。
在没接触Realm之前,基本都是用Sqlite,现在都抛弃Sqlite了,相对于Sqlite来说,Realm更快并且具有很多现代数据库的特性,支持JSON,流式api等,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。当然,现在Realm支持的语言挺多的,更多。
一.添加依赖
classpath "io.realm:realm-gradle-plugin:2.0.2"
添加Android 配置
apply plugin: 'realm-android'
二.创建数据库
创建数据库有两种方法:
1、使用默认的配置:
Realm.init(this); //默认配置 RealmConfiguration configuration = new RealmConfiguration.Builder().build(); Realm.setDefaultConfiguration(configuration);
2、自定义配置:
//自定义配置 RealmConfiguration configuration = new RealmConfiguration.Builder().name("myRealm.realm").deleteRealmIfMigrationNeeded().build(); Realm.setDefaultConfiguration(configuration);
注意:使用默认配置,系统也会生成一个d efault.realm的Realm文件.
三、添加数据
1.创建实体,继承RealmObject
public class Dog extends RealmObject {@PrimaryKey private String id; private String name; private int age; 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; }public String getId() {return id; }public void setId(String id) {this.id = id; } }
Realm遵循 ACID (数据库事务正确执行的四个基本要素的缩写)规范,为了确保原子性和一致性,它强制所有的写入操作都在一个事务中执行。
添加数据有两种方式,通过构造器添加或者直接使用Realm.createObject(),一下是两种不同的方式:
Realm myRealm = Realm.getDefaultInstance(); myRealm.beginTransaction(); Dog dog = myRealm.createObject(Dog.class); dog.setName("小狗"); dog.setAge(2); myRealm.commitTransaction();
Dog dog = new Dog(); dog.setName("小狗"); dog.setAge(2); myRealm.beginTransaction(); Dog dog1 = myRealm.copyToRealm(dog); myRealm.commitTransaction();
四、查询
查询数据使用RealmResults<T>,查询所有数据或者条件查询都行,当然,你也可以对查询的结果进行排序
public List<Dog> queryAllDog() {RealmResults<Dog> dogs = mRealm.where(Dog.class).findAll(); /** * 对查询结果,按Id进行排序,只能对查询结果进行排序 */ //增序排列 // dogs=dogs.sort("id"); //降序排列 // dogs=dogs.sort("id", Sort.DESCENDING); return mRealm.copyFromRealm(dogs); }
public Dog queryById(String id) {Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst(); return dog; }
五、删除
删除操作就简单了
Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst(); mRealm.beginTransaction(); dog.deleteFromRealm(); mRealm.commitTransaction();
六、改
Dog dog = mRealm.where(Dog.class).equalTo("id", id).findFirst(); mRealm.beginTransaction(); dog.setName(newName); mRealm.commitTransaction();
以上都是基于同步操作的,有时候项目里面会用到异步操作
比如异步添加:
RealmAsyncTask addTask= mRealm.executeTransactionAsync(new Realm.Transaction() {@Override public void execute(Realm realm) {realm.copyToRealm(cat); } }, new Realm.Transaction.OnSuccess() {@Override public void onSuccess() {ToastUtil.showShortToast(mContext,"添加成功"); } }, new Realm.Transaction.OnError() {@Override public void onError(Throwable error) {ToastUtil.showShortToast(mContext,"添加失败"); } });
异步查询
RealmResults<Cat> cats=mRealm.where(Cat.class).findAllAsync(); cats.addChangeListener(new RealmChangeListener<RealmResults<Cat>>() {@Override public void onChange(RealmResults<Cat> element) {element= element.sort("id"); List<Cat> datas=mRealm.copyFromRealm(element); } });
可跟的查询条件:
//可跟查询条件 //.or() 或者 //.beginsWith() 以xxx开头 //.endsWith() 以xxx结尾 //.greaterThan() 大于 //.greaterThanOrEqualTo() 大于或等于 //.lessThan() 小于 //.lessThanOrEqualTo() 小于或等于 //.equalTo() 等于 //.notEqualTo() 不等于 //.findAll() 查询所有 //.average() 平均值 //.beginGroup() 开始分组 //.endGroup() 结束分组 //.between() 在a和b之间 //.contains() 包含xxx //.count() 统计数量 //.distinct() 去除重复 //.findFirst() 返回结果集的第一行记录 //.isNotEmpty() 非空串 //.isEmpty() 为空串 //.isNotNull() 非空对象 //.isNull() 为空对象 //.max() 最大值 //.maximumDate() 最大日期 //.min() 最小值 //.minimumDate() 最小日期 //.sum() 求和
其他操作照葫芦画瓢。
这里说明一下Realm支持的一些数据类型:
boolean, byte, short, int, long, float, double, String, Date and byte[],在Realm中byte, short, int, long最终都被映射成long类型
Realm中也可以使用注解:
@PrimaryKey
1.在数据库里面就是主键的意思,字段必须是String、 integer、byte、short、 int、long 以及它们的封装类Byte, Short, Integer, and Long
2.使用了该注解之后可以使用copyToRealmOrUpdate()方法,通过主键查询它的对象,如果查询到了,则更新它,否则新建一个对象来代替
3.使用了该注解将默认设置@index注解,查询数据会快一点
@Required
数据不能为null
@Ignore
忽略,即该字段不被存储到本地
@Index
为这个字段添加一个搜索引擎,这将使插入数据变慢、数据增大,但是查询会变快。建议在需要优化读取性能的情况下使用。
了解更多就去官网 Realm Java
demo:https://github.com/hedongBlog/DemoRealm
Realm 数据库的简单使用相关推荐
- Realm数据库存储 使用详解
文章目录 一 Realm 框架 概念介绍 开发辅助工具 二 Realm 使用教程 1 简单的数据操作 创建数据模型 使用RLMRealm对象保存指定模型 使用RLMRealm对象 更新指定模型 使用R ...
- ios realm 文件_iOS Realm数据库使用
Realm 是 SQLite 和 Core Data 的替代者,得益于其零拷贝的设计,Realm 比任何 ORM 都要快很多. Objective‑C版本的 Realm 能够让您以一种安全.耐用以及迅 ...
- Realm数据库的使用
文章目录 写在前面 简单使用 几个概念 1. 数据模型 2. 事务 3. 引用计数 4. 数据库的迁移 添加配置文件 初始化Realm并配置Realm 1. 在application的`onCreat ...
- Android Realm数据库完美解析
转自 http://blog.csdn.net/fesdgasdgasdg/article/details/51897212 demo http://download.csdn.net/detai ...
- 如何在Android中使用Realm数据库
我们都知道使用SQLite的本地数据库,它在Android 开发中用于内部存储器存储,主要存储本地数据,如联系人,电话详细信息等.现在我发现一个比SQLite更轻的数据库,被称为Realm数据库,我想 ...
- ios realm 文件_iOS realm数据库使用笔记
1,引入数据库 这里是使用cocoapods导入,手动导入以后有时间会去做 2,查看数据库路径,以及查看数据库的文件 路径一般都是在Documents里面,打印方法: NSString *path = ...
- android realm数据库,浅谈Realm数据库及其使用
1.Realm介绍 realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android.目前还支持React Native 和 Xamarin. 201 ...
- react-native之Realm数据库的使用(一)
realm数据库是一款小型数据库系统,可以支持多个平台,如android.ios.javascript等.当然了realm也是可以支持react-native的,官网有具体介绍,官网文档 安装real ...
- springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁
本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...
最新文章
- 51单片机怎么学啊?有推荐的网课和书籍么?
- python furl模块 网址修改 参数解析
- CodeForces - 894B Ralph And His Magic Field(组合数学+思维)
- c mysql 设置字符集_MYSQL字符集设置的方法详解(终端的字符集)
- php什么程度算学会,十天学会PHP - 序1,学会的标准是什么?(20180820-1)
- [转]JS对JSON的操作总结
- 20190928 On Java8 第二十三章 注解
- element中的table相关
- 游戏必备组件_没有网络也可以肝的单机小游戏!玩一局就停不下来
- node.js 模板引擎
- 用python画简单的猴子画法_10种可爱的小猴子简笔画合集,分分钟被萌翻,一看就会画...
- C++银行账户管理程序2
- 139显示无法imap服务器,139邮箱客户端 imap服务器
- openwrt修改默认网关地址_修改宇视摄像机IP地址的方法
- A+B的各种写法(不是couta+b;)
- ubuntu下安装goldendict及离线词库
- (C语言)用函数实现求三个数最大值
- Oracle删除数据非常慢
- clock gate spec
- androidstudio虚拟机打不开的解决方法,一路坎坷,靠运气成功的!!!
热门文章
- golang使用grom连接mysql,Error 1146: Table ‘xxx.xxxs‘ doesn‘t exist
- 【Python + Zotero】近乎全自动的完美 bib 文件生成
- 截图自动添加水印(macOS/windows)
- 自定义 FlowLayout流式布局搜索框 加 GreenDao存取搜索记录,使用RecyclerView展示
- 安卓开发之沉浸式应用——导航栏状态栏同应用背景
- 室内设计属计算机专业吗,室内设计技术专业
- oracle SQL语句硬编码带来的问题以及解决办法
- 学生学python编程---实现贪吃蛇小游戏+源码
- windows编译openssh(automake编译)
- 使用 CSS 构建自定义粘性导航栏