Realm使用简单介绍

移动端 realm数据库使用及解耦,跨线程安全使用 OC realm 最近在搞IM,因为消息量多,实时读写及并发相当的多,原项目封装使用了FMDB,但这个东西对比于并发多线程读写实在不敢恭维,动不动出现锁导致卡顿,体验极期扯蛋。虽然实现队列读写,但是还是管不住这东西的缺陷。。于是乎寻找替换方案。首先考虑了WCDB,即微信团队发布的开源数据库,但是使用起来相当的别扭,所有属性字段得一个一个的去使用他的宏去声明,工作太繁锁,相信软件及开源的初衷一定是减少开发者的代码耦合及胶水坨坨。再次考虑都查了Realm这个开源库,库本身为500多M,使用后各种崩溃,100%都是跨线程使用,虽然 阅读详情

简介

Realm是一个轻量级的数据库,在Android开发中,它可以替代 SQLite 和 ORM 框架。相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持。

官网主页:realm官网

GutHub地址:realm的GitHub地址

工程配置

1、在工程根目录的build.gradle中添加dependencies

 classpath "io.realm:realm-gradle-plugin:1.1.0"
2、在app的build.gradle中添加plugin
apply plugin: 'realm-android'
注意:不需要再配置compile dependencies

realm的创建

1、获取默认realm

 Realm myRealm = Realm.getDefaultInstance();

需要注意,在调用这个方法之前一定要先setDefaultConfiguration,否则会抛异常

if (defaultConfiguration == null) {
            throw new NullPointerException("No default RealmConfiguration was found. Call setDefaultConfiguration() first");
        }
RealmConfiguration必须通过Builder构建, RealmConfiguration的构造方法是私有的。

指定明确的RealmConfiguration可以获取指定Realm实例

   Realm.getInstance(new RealmConfiguration.Builder(MainActivity.this).build());

2、创建RealmObject

一个类继承了RealmObject,那么它就可以用来存储Realm

官方代码示例

// Define you model class by extending RealmObject
public class Dog extends RealmObject {
    private String name;
    private int age;

    // ... Generated getters and setters ...
}

public class Person extends RealmObject {
    @PrimaryKey
    private long id;
    private String name;
    private RealmList<Dog> dogs; // Declare one-to-many relationships

    // ... Generated getters and setters ...
}

// Use them like regular java objects
Dog dog = new Dog();
dog.setName("Rex");
dog.setAge(1);

// Create a RealmConfiguration that saves the Realm file in the app's "files" directory.
RealmConfiguration realmConfig = new RealmConfiguration.Builder(context).build();
Realm.setDefaultConfiguration(realmConfig);

// Get a Realm instance for this thread
Realm realm = Realm.getDefaultInstance();

// Query Realm for all dogs younger than 2 years old
final RealmResults<Dog> puppies = realm.where(Dog.class).lessThan("age", 2).findAll();
puppies.size(); // => 0 because no dogs have been added to the Realm yet

// Persist your data in a transaction
realm.beginTransaction();
final Dog managedDog = realm.copyToRealm(dog); // Persist unmanaged objects
Person person = realm.createObject(Person.class); // Create managed objects directly
person.getDogs().add(managedDog);
realm.commitTransaction();

// Listeners will be notified when data changes
puppies.addChangeListener(new RealmChangeListener<RealmResults<Dog>>() {
    @Override
    public void onChange(RealmResults<Dog> results) {
        // Query results are updated in real time
        puppies.size(); // => 1
    }
});

// Asynchronously update objects on a background thread
realm.executeTransactionAsync(new Realm.Transaction() {
    @Override
    public void execute(Realm bgRealm) {
        Dog dog = bgRealm.where(Dog.class).equalTo("age", 1).findFirst();
        dog.setAge(3);
    }
}, new Realm.Transaction.OnSuccess() {
    @Override
    public void onSuccess() {
    	// Original queries and Realm objects are automatically updated.
    	puppies.size(); // => 0 because there are no more puppies younger than 2 years old
    	managedDog.getAge();   // => 3 the dogs age is updated
    }
});

官方文档地址

https://realm.io/docs/java/latest/#models

后续做一下文档翻译,源码解析。




欢迎扫描二维码,关注公众号




【iOS】基于Realm数据库的记账软件--Realm数据库(一) 1、数据库表设计账单表:Bill 字段 类型 说明 billID NSString 账单ID,主键 date NSString 账单产生日期 money Double 账单金额 isIncome Bool true代表收入,false代表支出 remark NSString 备注 accountID NSString 阅读详情

相关推荐

使用Realm Swift进行iOS应用开发

通过Realm Swift,我们可以轻松地处理本地数据存储和访问,以及执行各种数据操作。如果在应用程序的后续版本中更改了数据模型,我们需要执行数据库迁移。Realm Swift提供了一个简单的迁移机制,可以帮助我们进行平滑的数据模型更新。首先,我们需要将Realm Swift添加到我们的项目中。在使用Realm Swift之前,我们需要定义数据模型。在迁移块中,我们可以编写逻辑来处理旧模式版本和执行必要的数据迁移操作。使用Realm Swift,我们可以执行多种数据操作,包括创建、读取、更新和删除对象。

BUG?不存在的! 575

Realm 的使用入门

​ 要初始化 Realm 库,请将 Android context 提供给 Realm.init()static函数。您可以提供一个 Activity,Fragment 或 Application context 进行初始化,而在行为上没有差异。您可以在 Application子类 的 onCreate() 方法中初始化 Realm 库,以确保每次应用程序运行时仅对 Realm 进行一次初始化。 ​

Pursuit_li的博客 695

房产平台系统小程序源码

🏠 一键解锁购房新体验 🔓房产小程序 实现前端 发布二手房 租房 商品 求租 求购等信息;后台发布 新房,二手房租房 商品 写字楼 求租求购等房源信息;功能完善的一块房产小程序。

2401_84413757的博客 795

Realm For Android 基本使用

文章目录Realm一、Realm简介1.什么是Realm2.Realm优势二、Realm使用1. 数据模型2. 事务手动开启同步事务同步事务执行块异步事务执行块1.Realm基本配置2.创建一个Realm数据库3. Samples3.1创建model3.2添加数据(增)3.3删除数据(删)3.4查询数据(查)3.4修改数据(改)4.Realms5. 多表关系6. JSON7. 版本升级8. 加密 ...

BUG-DEV 1573

最简解决 Unity Error Registry configuration is invalid Unable to connect https packages.unity.cn

前言 在学习其他大佬项目的时候,大佬说项目能直接运行,然后我拉下来就报如下错误 Unity报错:[Package Manager]Error Registry configuration is invalid:Unable to connect “https://packages.unity.cn” 翻了很多博发现是 unity3d 中国增强版的原因,中国增强版屏蔽了国外自定义的插件仓库。 安装 非中国增强版后可以成功打开。 然后大家给出的解决方案都比较激进,大抵就是更换Unity版本就OK了。 当然我是觉

Gipsyz的博客 6841

教你读懂techpoint视频解码芯片tp2855规格书(第一部分)

所有的控制环都是可编程的,以实现最大化的灵活性。对于NTSC/PAL输入,输出时钟和采样结构是非标准的,以便在多路复用输出时与HD格式一同工作。所有通道的音频数据都可以选择性地级联,以实现最大的灵活性。TP2855是一款通用的高清/标清视频解码器芯片,其支持对HD-TVI、NTSC/PAL制式960H分辨率及普通AHD视频格式的解码。TP2855具有内部钳位,在每个通道上都有自动增益控制放大器,用于最佳的信号调节。即使在使用低质量和长线缆的条件下,它的可编程均衡放大器和自动控制环也能维持尚佳的表现。

hufan92的博客 4916

Android Realm数据库使用

也就是说,Realm实例在线程中,如果没有Looper,是不能收到更新通知的,list.add(new TestUser(2,"adidass", "110119", 28, "云南德克萨斯州", "海员", "男"));list.add(new TestUser(0,"android", "123123", 20, "河南常德", "传菜员", "女"));list.add(new TestUser(4,"hibrid", "120250", 26, "赣州", "贼", "男"));

Dream It Possible 2180

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

Realm数据库使用教程(一):Realm配置和Stetho配置

本人主要是开发android项目的,这里只对android端Realm使用进行总结。对于Realm的优缺点,既然你要使用了,就说明你有一定的了解,在这里就不介绍了!如果需要可自行googleRealm官方文档:https://realm.io/docs/java/latest/ 数据库效率对比 分别采用greendao、ormlite、realm三种数据框架对同一数据结构Note进行10000次和1

黄孝果的博客 1万+

为什么桥式传感器(Bridge Sensor)需要用到仪表放大器?

仪表放大器在桥式传感器的应用里起到关键作用,本文介绍桥式传感器的原理、特性,以及信号调理过程,并附上了一个 TINA - TI 的仿真电路。

疯狂的运放 1527

玩转Docker小游戏项目系列:Docker部署吃豆人经典小游戏

玩转Docker小游戏项目系列:Docker部署吃豆人经典小游戏

jks212454的博客 732

Realm数据库的使用(一)数据库的简单介绍和模型的创建

Realm 是一种可以替代SQLite 和CoreData的移动端数据库 使用前提: iOS >= 7 or Mac OS X >= 10.9 Xcode >= 6 Both Objective-C & Swift are supported. 安装: 可通过CocoaPods加入项目中 pod serarch 'Realm' Realm浏览器/数...

weixin_30686845的博客 161

Briefings in Bioinformatics投稿经验分享

Briefings in Bioinformatics投稿经验分享

LiRongLu_的博客 3336

Realm数据持久化方案的简单介绍和使用(二)

接上篇。。。 4. 可空属性&默认值&忽略属性 默认情况下, 属性值可空, 如果强制要求某个属性非空, 可以使用如下方法: 遵循协议方法 + (NSArray *)requiredProperties { return @[@"name"]; } 特点:如果再次赋值为nil, 则会抛出异常错误 也可以设置默认值 + (NSDictionary *)defau...

weixin_30337157的博客 122

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ios,简单使用realm数据库

Realm Realm-Object-c,见:https://realm.io/cn/docs/objc/latest/ Realm官网:https://realm.io 介绍 Realm可以轻松地移植到项目当中,并且绝大部分常用的功能(比如说插入、查询等等)都可以用一行简单的代码轻松完成!目前支持Objective-C、Swift和Java三种语言,也就是说能在iOS、Android和Ma...

普雷的博客 1232

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android realm 简书,Realm简介

概述是一个跨平台移动数据库引擎,支持iOS、OS X(Objective‑C和Swift)以及Android。Realm相较于SQLite:性能相对其他移动端数据库性能更优。使用相对于SQLite,用法更加简单。据说Realm的目标是为了代替 CoreData 和 SQLite 数据库特性性能高一秒钟查询遍历20万条数据的次数android对比- 简单易用Realm数据直接暴露成类对象,通过对象查...

weixin_39683598的博客 658

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数据库简单使用之Realm入门

这两天研究数据持久化方案,FMDB MR 都简单的用过一些,偶然知道还要一个Realm,就在网上试试 写了一个demo: pod 'Realm' 即可,对于OC或者Swift的选择,个人喜好。 那么创建数据库: 配置数据路信息: 1.增: 2.删 3.查: 4.改 ,而Realm的数据模型化操作的便利性就体现在对数据

ZHZMAREN的博客 421

realm android v7a,realm 使用总结

Realm,为移动设备而生!替代 SQLite 和 Core Data。为你省下数周的时间和数千行的代码,帮你创造出更棒的用户体验。--Realm官网benchmarks-android.001.pngbenchmarks-android.002.pngbenchmarks-android.003.png优势Realm 并不是基于 Core Data ,也不是基于 SQLite 所构建的。它拥有自...

weixin_30213173的博客 157

Android基础之Realm快速入门教程

—————————-官网—————————1 介绍安卓开发的最新趋势,Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库。相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。在这篇快速入门教程中,将学到Android版Realm的基础知识。本教程我们使用的是Realm v0.

chenliguan的博客 812

Realm数据库存储 使用详解

文章目录 一 Realm 框架 概念介绍 开发辅助工具 二 Realm 使用教程 1 简单的数据操作 创建数据模型 使用RLMRealm对象保存指定模型 使用RLMRealm对象 更新指定模型 使用RLMRealm对象 删除数据 查询数据 2 支持的数据类型 3 模型与模型之间的关系 对一关系 对多关系 反向关系 4 可空属性&amp;默认值&amp;忽略属性 5 通知 6 Real...

weixin_34405557的博客 1029

android realm jar包,[Android] Realm 的初探

关于Realm在学习 Android 的时候 , 我们知道数据持久化的问题,对于数据持久化通常有以下几种方式:SQLliteSharedpreferences文件 I/O现在,有一种使用方便,速度更快的存储数据方式出现了,他就是 Realm。他的官网Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库。相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持...

weixin_29344293的博客 245

Android Realm数据库完美解析

当我们的app有数据需要保存到本地缓存时,可以使用file,sharedpreferences,还有sqlite。 sharedpreferences其实使用xml的方式,以键值对形式存储基本数据类型的数据。对于有复杂筛选查询的 操作,file和sharedpreferences都不能满足了。sqlite可以满足有大量复杂查询要求的缓存数据操作。但是sqlite的使用略复杂,代码量很大,还好网

阿杜 3万+

Android 接入Realm并使用

今天看自己写的github demo 看到Realm 这里在回顾下 github 搜索Realm 我们可以选择java 可以看到Realm 介绍: Realm是直接在手机,平板电脑或可穿戴设备内部运行的移动数据库。该存储库保存Realm的Java版本的源代码,该版本当前仅在Android上运行 特征 移动优先:Realm是第一个从头开始构建的数据库,可直接在手机,平板电脑和可穿戴设备中运行。 简单:数据直接作为对象公开,并且可以通过代码查询,从而消除了对ORM繁琐的性...

小牧在一直在学习,在前进的道路上大家一起学习,进步。 2940

iOS开发-数据持久化Realm的简单使用

Realm是和SQLite一样用于数据存储,但是它有几个特点比其它的数据库要好用: 1.跨平台 :现在绝大多数的应用开发并不仅仅只在 iOS 平台上进行开发,还要兼顾到 Android 平台的开发。为两个平台设计不同的数据库是愚蠢的,而使用 Realm 数据库, iOS 和 Android 无需考虑内部数据的架构,调用 Realm 提供的 API 就可以完成数据的交换,实现 “ 一个数据库,两...

weixin_30323961的博客 128

Realm

Realm在iOS中的简单使用

yq_2018的博客 256
上一篇: SQLite清空表并将自增列归零
下一篇: Android 的String资源格式化方法
robert_chao
博客等级 码龄15年 265粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值