ios realm 文件_iOS realm数据库使用笔记
1,引入数据库
这里是使用cocoapods导入,手动导入以后有时间会去做
2,查看数据库路径,以及查看数据库的文件
路径一般都是在Documents里面,打印方法:
NSString *path = NSHomeDirectory();//主目录
NSLog(@"NSHomeDirectory:%@",path);
NSString *userName = NSUserName();//与上面相同
NSString *rootPath = NSHomeDirectoryForUser(userName);
NSLog(@"NSHomeDirectoryForUser:%@",rootPath);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory=[paths objectAtIndex:0];//Documents目录
NSLog(@"NSDocumentDirectory:%@",documentsDirectory);
找到数据库的路径,创建成功的话,能看到以.realm 结尾的文件,就是数据库文件,打开该文件的软件我用的是:Realm Browser。 在app store里面可以搜索到的,是免费软件
3,创建数据库
如果是第一次创建数据库,就不用判断版本。但是如果不是第一次建立数据库,比如升级app的时候,在新版本的app数据库中添加了几个属性,这时候就要判断app内数据库的版本,因为如果不判断版本,就会出现崩溃的现象,代码:《一般会在判断版本数据库路径最后,创建数据库这里只是把创建的方法单独提出来了》
//获取数据库路径
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString * pathName = [path stringByAppendingString:@"/realmTest.realm"];
RLMRealmConfiguration * config = [RLMRealmConfiguration defaultConfiguration];
//最新版本,每次更新,都要在上次的基础上加一,不能低于之前的版本
config.schemaVersion = 3;
//配置新路径
config.fileURL = [NSURL URLWithString:pathName];
config.migrationBlock = ^(RLMMigration * _Nonnull migration, uint64_t oldSchemaVersion) {
if (oldSchemaVersion < 3) {
NSLog(@"进行数据迁移");
}else{
NSLog(@"不进行数据迁移");
}
};
[RLMRealmConfiguration setDefaultConfiguration:config];
创建数据库:
默认版本创建:
RLMRealm * realm = [RLMRealm defaultRealm];
自定义创建:
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString * pathName = [path stringByAppendingString:@"/realmTest.realm"];
RLMRealm * realm = [RLMRealm realmWithURL:[NSURL URLWithString:pathName]];
4,添加数据
首先创建模型
m文件的内容,必不可少
h文件的内容
首先是添加一种数据到数据库,没有包含关系的:
SYDog * dog = [[SYDog alloc]init];
dog.name = [NSString stringWithFormat:@"dog_%u",arc4random()%10];
dog.owner = [NSString stringWithFormat:@"%d",i];
dog.sex = arc4random()%2;
NSInteger cun = self.colorArray.count;
dog.colorStr = self.colorArray[arc4random()%cun];
//默认数据库路径以及名字
/*
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
[realm addObject:dog];
}];
*/
//自定义数据库名字和路径
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString * pathName = [path stringByAppendingString:@"/realmTest.realm"];
RLMRealm * realm = [RLMRealm realmWithURL:[NSURL URLWithString:pathName]];
[realm transactionWithBlock:^{
[realm addObject:dog];
}];
添加包含数组的数据到数据库《这里的思路跟添加单个差不多,就相当于添加完单个的,再把单个模型作为一个元素添加到数组中》:
SYPreson * presen = [[SYPreson alloc]init];
presen.name = [NSString stringWithFormat:@"地主——%d",i];
presen.age = arc4random()%20;
if (arc4random()%2 == 1) {
presen.isMan = YES;
}else{
presen.isMan = NO;
}
NSInteger a = arc4random()%self.palceArray.count;
presen.adress = [NSString stringWithFormat:@"%@",self.palceArray[a]];
for (int i = 0; i < 10; i++) {
SYDog * dog = [[SYDog alloc]init];
dog.name = [NSString stringWithFormat:@"dog_%u",arc4random()%10];
dog.owner = [NSString stringWithFormat:@"%d",i];
dog.sex = arc4random()%2;
NSInteger cun = self.colorArray.count;
dog.colorStr = self.colorArray[arc4random()%cun];
[presen.dogs addObject:dog];
}
SYClass * clas = [[SYClass alloc]init];
NSInteger year = arc4random()%8;
NSInteger ca = arc4random()%50;
clas.className = [NSString stringWithFormat:@"%ld年级 %ld班",year,ca];
clas.classNumber = [NSString stringWithFormat:@"%u",arc4random()%120];
[presen.classs addObject:clas];
//默认数据库路径
/*
RLMRealm * realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
[realm addObject:presen];
}];
*/
//自定义数据库名字和路径
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString * pathName = [path stringByAppendingString:@"/realmTest.realm"];
RLMRealm * realm = [RLMRealm realmWithURL:[NSURL URLWithString:pathName]];
[realm transactionWithBlock:^{
[realm addObject:presen];
}];
查询数据库:
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString * pathName = [path stringByAppendingString:@"/realmTest.realm"];
RLMRealm * realm = [RLMRealm realmWithURL:[NSURL URLWithString:pathName]];
//查询所有
RLMResults * presons = [SYPreson allObjectsInRealm:realm];
// NSLog(@" === %@",presons);
for (SYPreson * pre in presons) {
// NSLog(@"pwer == %@",pre.name);
}
//按照年龄查询,年龄为int类型
RLMResults * ages = [SYPreson objectsInRealm:realm where:@"age = 12"];
for (SYPreson * age in ages) {
// NSLog(@"age === %@ %ld",age.name,age.age);
}
//按照名字查询,名字是string类型
RLMResults * dogs = [SYDog objectsInRealm:realm where:@"name = 'dog_2'"];
for (SYDog * dog in dogs) {
// NSLog(@"dog === %@ %@",dog.name,dog.owner);
}
//多种条件查询
RLMResults * res = [SYPreson objectsInRealm:realm where:@"age < 12 AND adress = '秦朝'"];
for (SYPreson * p in res) {
// NSLog(@"------ %@ %@ %ld",p.name,p.adress,p.age);
}
//断言查询,查询速度比较快,推荐使用
//断言查询单个数据
NSPredicate * pre = [NSPredicate predicateWithFormat:@"ANY dogs.sex = %ld",1];
RLMResults * resPre = [SYPreson objectsInRealm:realm withPredicate:pre];
for (SYPreson * pres in resPre) {
// NSLog(@"------ %@ %@ %ld",pres.name,pres.adress,pres.age);
}
//断言查询多个数据条件
NSPredicate * pres = [NSPredicate predicateWithFormat:@"adress = %@",@"秦朝"];
NSPredicate * presN = [NSPredicate predicateWithFormat:@"ANY dogs.name = %@",@"dog_3"];
//链式查询,
RLMResults * resPres = [[SYPreson objectsInRealm:realm withPredicate:pres] objectsWithPredicate:presN];
for (SYPreson * pr in resPres) {
NSLog(@"------ %@ %@ %ld",pr.name,pr.adress,pr.age);
}
修改和删除都是在查询的基础上进行的操作,这里只写出了简单的修改和删除操作
修改数据库
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString * pathName = [path stringByAppendingString:@"/realmTest.realm"];
RLMRealm * realm = [RLMRealm realmWithURL:[NSURL URLWithString:pathName]];
//查询出年龄为1的person
RLMResults * per = [SYPreson objectsInRealm:realm where:@"age = 1"];
for (SYPreson * p in per) {
[realm transactionWithBlock:^{
p.name = @"年龄为1,修改名字";
}];
}
删除数据库
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString * pathName = [path stringByAppendingString:@"/realmTest.realm"];
RLMRealm * realm = [RLMRealm realmWithURL:[NSURL URLWithString:pathName]];
//删除某一类元素,这里的查询操作跟上面查询操作一样,查询到单个或者多个数据,使用delete方法直接删除
RLMResults * ages = [SYPreson objectsInRealm:realm where:@"age > 14"];
[realm transactionWithBlock:^{
[realm deleteObjects:ages];
}];
//直接删除所有数据
RLMResults * per = [SYPreson allObjectsInRealm:realm];
[realm transactionWithBlock:^{
//单独删除每个数据,如果要删除所有的,要使用循环删除
// [realm deleteObject:per.lastObject];
//一次性删除一个数组的数据
[realm deleteObjects:per];
}];
RLMResults * dogs = [SYDog allObjectsInRealm:realm];
[realm transactionWithBlock:^{
[realm deleteObjects:dogs];
}];
简单的增删改查,关于realm更深层次的用法会在以后慢慢更新
realm 官网地址:realm
ios realm 文件_iOS realm数据库使用笔记相关推荐
- ios realm 文件_iOS Realm数据库使用
Realm 是 SQLite 和 Core Data 的替代者,得益于其零拷贝的设计,Realm 比任何 ORM 都要快很多. Objective‑C版本的 Realm 能够让您以一种安全.耐用以及迅 ...
- ios realm 文件_iOS开发中使用Realm数据库
// 查 RLMResults * dogs = [LSDog allObjects]; NSLog(@"===%@", dogs); RLMResults * pers = [L ...
- ios realm 文件_iOS数据持久化方案-Realm的使用
总体内容 1.Realm介绍 2.使用教程与辅助工具 3.Realm的具体使用 一.Realm介绍 1.1.Realm 是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swi ...
- ios realm 文件_iOS数据持久化之-Realm使用深入详解篇
原创 2019-11-21 相信关于Realm的基本使用介绍,在很多文章都已经介绍过了,其中访问比较多的有: Realm在iOS中的简单使用 Realm数据库 从入门到"放弃" 官 ...
- ios realm 文件_Realm在iOS上的使用
[Realm]是由美国YCombinator孵化的创业团队历时几年打造,第一个专门针对移动平台设计的数据库* [Realm]是一个跨平台的移动数据库引擎,目前支持iOS.Android平台,同时支持O ...
- ios realm 文件_realm之于iOS
Realm是除了CoreData和Sqlite之外的第三个选择,一个近几年兴起的全新的数据库方案,一直保持着活跃的更新,而且引起了iOS开发圈广泛的关注.Realm到底好不好用,又有哪些闪光点呢?下面 ...
- 【Android】Realm详解(Android 数据库Sqlite的完美替代者)
介绍 Realm 是一个 MVCC (多版本并发控制)数据库,由Y Combinator公司在2014年7月发布一款支持运行在手机.平板和可穿戴设备上的嵌入式数据库,目标是取代SQLite. Real ...
- android realm 分页,iOS Realm数据持久化--Realm基础知识 (一)
目录 1.Realm简介 Realm是新兴的跨平台数据库解决方案,提供多语言支持(JAVA.Objective-C.Swift.JS..Net),你可以轻松的在iOS.Android等移动平台接入.R ...
- Realm(Java)数据库使用文档(查询Queries)
文章目录 8.1 筛选 8.2 逻辑运算符 8.3 排序 8.4 结果限制 8.5 唯一值 8.6 链式查询(Chaining queries) 8.7 关联查询(Link queries) 8.8 ...
最新文章
- AngularJS-Basic(一)
- 【AAAI2022】TLogic:时序知识图谱上可解释链接预测的时间逻辑规则
- AWS — AWS ECS
- 根据文件名或文件扩展名获取文件的默认图标
- 用DocumentFragments或innerHTML取代复杂的元素注入
- hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
- 关于手机端CSS Sprite图标定位的一些领悟
- python中常量池和堆_JVM详解之:运行时常量池
- 大厂首选,为什么 SRE 比传统运维更抢手?
- 如何利用IDM加速下载百度网盘大文件
- 基本农田卫星地图查询_别被迷惑了,你手机上的北斗导航App和北斗卫星导航没关系...
- 从零搭建Spring Boot脚手架(2):增加通用的功能
- c语言进程伪装,易语言程序伪装软件
- 幂指函数的极限运算法则
- 《近匠》专访Ayla Networks云平台工程部主管Sudha Sundaresan——企业级物联网云平台的设计与部署
- Android实现抽奖转盘
- 机器学习项目三:XGBoost人体卡路里消耗预测
- 小记Android Gradle插件 Iven 记于 20190522 药厂
- 【源码课件+名师讲解】Java优质课程分享
- chromium 46 编译chromium老版本流程
热门文章
- 阿里开源分布式事务seata demo示例(原Fescar)
- 照片物品怎么进行识别?这些方法不可以错过
- 【IDEA】【工具】提升幸福感 开发常用的工具 插件/网站/软件
- 图像像素点绝对坐标与百分比坐标(相对坐标)的坐标转换公式(像素点下标越界判定)
- 当初脑子进了水,偏偏要做互联网…
- zabbix分布式系统监控报错( host not monitored)
- 公元年每一天是星期几
- 【每日一好题】官方题解看不懂,别怕我教你吊打官方题解:重新格式化电话号码
- IP公司及其处理器IP系列(DSP, GPU, AI)
- Java Type Annotation