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数据库使用笔记相关推荐

  1. ios realm 文件_iOS Realm数据库使用

    Realm 是 SQLite 和 Core Data 的替代者,得益于其零拷贝的设计,Realm 比任何 ORM 都要快很多. Objective‑C版本的 Realm 能够让您以一种安全.耐用以及迅 ...

  2. ios realm 文件_iOS开发中使用Realm数据库

    // 查 RLMResults * dogs = [LSDog allObjects]; NSLog(@"===%@", dogs); RLMResults * pers = [L ...

  3. ios realm 文件_iOS数据持久化方案-Realm的使用

    总体内容 1.Realm介绍 2.使用教程与辅助工具 3.Realm的具体使用 一.Realm介绍 1.1.Realm 是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swi ...

  4. ios realm 文件_iOS数据持久化之-Realm使用深入详解篇

    原创 2019-11-21 相信关于Realm的基本使用介绍,在很多文章都已经介绍过了,其中访问比较多的有: Realm在iOS中的简单使用 Realm数据库 从入门到"放弃" 官 ...

  5. ios realm 文件_Realm在iOS上的使用

    [Realm]是由美国YCombinator孵化的创业团队历时几年打造,第一个专门针对移动平台设计的数据库* [Realm]是一个跨平台的移动数据库引擎,目前支持iOS.Android平台,同时支持O ...

  6. ios realm 文件_realm之于iOS

    Realm是除了CoreData和Sqlite之外的第三个选择,一个近几年兴起的全新的数据库方案,一直保持着活跃的更新,而且引起了iOS开发圈广泛的关注.Realm到底好不好用,又有哪些闪光点呢?下面 ...

  7. 【Android】Realm详解(Android 数据库Sqlite的完美替代者)

    介绍 Realm 是一个 MVCC (多版本并发控制)数据库,由Y Combinator公司在2014年7月发布一款支持运行在手机.平板和可穿戴设备上的嵌入式数据库,目标是取代SQLite. Real ...

  8. android realm 分页,iOS Realm数据持久化--Realm基础知识 (一)

    目录 1.Realm简介 Realm是新兴的跨平台数据库解决方案,提供多语言支持(JAVA.Objective-C.Swift.JS..Net),你可以轻松的在iOS.Android等移动平台接入.R ...

  9. Realm(Java)数据库使用文档(查询Queries)

    文章目录 8.1 筛选 8.2 逻辑运算符 8.3 排序 8.4 结果限制 8.5 唯一值 8.6 链式查询(Chaining queries) 8.7 关联查询(Link queries) 8.8 ...

最新文章

  1. AngularJS-Basic(一)
  2. 【AAAI2022】TLogic:时序知识图谱上可解释链接预测的时间逻辑规则
  3. AWS — AWS ECS
  4. 根据文件名或文件扩展名获取文件的默认图标
  5. 用DocumentFragments或innerHTML取代复杂的元素注入
  6. hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
  7. 关于手机端CSS Sprite图标定位的一些领悟
  8. python中常量池和堆_JVM详解之:运行时常量池
  9. 大厂首选,为什么 SRE 比传统运维更抢手?
  10. 如何利用IDM加速下载百度网盘大文件
  11. 基本农田卫星地图查询_别被迷惑了,你手机上的北斗导航App和北斗卫星导航没关系...
  12. 从零搭建Spring Boot脚手架(2):增加通用的功能
  13. c语言进程伪装,易语言程序伪装软件
  14. 幂指函数的极限运算法则
  15. 《近匠》专访Ayla Networks云平台工程部主管Sudha Sundaresan——企业级物联网云平台的设计与部署
  16. Android实现抽奖转盘
  17. 机器学习项目三:XGBoost人体卡路里消耗预测
  18. 小记Android Gradle插件 Iven 记于 20190522 药厂
  19. 【源码课件+名师讲解】Java优质课程分享
  20. chromium 46 编译chromium老版本流程

热门文章

  1. 阿里开源分布式事务seata demo示例(原Fescar)
  2. 照片物品怎么进行识别?这些方法不可以错过
  3. 【IDEA】【工具】提升幸福感 开发常用的工具 插件/网站/软件
  4. 图像像素点绝对坐标与百分比坐标(相对坐标)的坐标转换公式(像素点下标越界判定)
  5. 当初脑子进了水,偏偏要做互联网…
  6. zabbix分布式系统监控报错( host not monitored)
  7. 公元年每一天是星期几
  8. 【每日一好题】官方题解看不懂,别怕我教你吊打官方题解:重新格式化电话号码
  9. IP公司及其处理器IP系列(DSP, GPU, AI)
  10. Java Type Annotation