一、使用realm数据库,创建表

创建表是最简单的,创建表就是创建Model模型

image.png

创建一个Person类,继承RLMObject,给上几个属性,一张Person就建好了。

@interfacePerson:RLMObject/**姓名*/@propertyNSString*name;/**年龄*/@propertyNSNumber*age;/**性别*/@propertyNSString*sex;@propertyRLMArray*dogs;@endRLM_ARRAY_TYPE(Person)

再建一个Dog表

#import@interfaceDog:RLMObject@propertyNSString*name;@propertyNSString*color;@propertyNSString*identify;@endRLM_ARRAY_TYPE(Dog)

设置identify为主键

+(NSString*)primaryKey{return@"identify";}

建表总结:做为表对象(继承RLMObject)不能都重写setter和getter方法,这就是Realm一个不好的地方,对我们的数据有一定的侵入性,为解决这个问题,我们可以建立一个rlm对象,一个继承NSObject的对象,例如:

RLMPerson:RLMObject;Person:NSObject;

提供数据换的方式

2、创建一个数据库管理对象

#import@classRLMRealm;@interfaceDataBase:NSObject+(RLMRealm*)db;+(void)dataBaseMigration;+(BOOL)dropRealmIfNeed;@end

#import"DataBase.h"#importstaticRLMRealmConfiguration*_chdRemoteRealmCustomConfig;@implementationDataBase+(RLMRealmConfiguration*)config{staticRLMRealmConfiguration*_config=nil;if(!_config){RLMRealmConfiguration*config=[[RLMRealmConfiguration alloc]init];//配置数据迁移的时候,如果有错误导致崩溃问题,会删除数据库重建,不会崩溃,但是数据会丢失。配置NO数据不会丢失,但是应用会崩溃config.deleteRealmIfMigrationNeeded=YES;NSString*configPath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject]stringByAppendingString:@"/config.realm"];config.fileURL=[NSURL URLWithString:configPath];//设置realm管理的RLMObjects,管理了那么些表,多个数据库表可以分开管理config.objectClasses=@[NSClassFromString(@"Person"),NSClassFromString(@"Dog")];_config=config;}return_config;}+(RLMRealm*)db{RLMRealm*configRealm=[RLMRealm realmWithConfiguration:self.config error:nil];returnconfigRealm;}+(void)dataBaseMigration{//使用自定义配置的config realm进行迁移RLMRealmConfiguration*config=self.config;//配置数据版本,每次项目发布加1config.schemaVersion=2;config.migrationBlock=^(RLMMigration*migration,uint64_t oldSchemaVersion){if(oldSchemaVersion<2){}};}+(BOOL)dropRealmIfNeed{return[[NSFileManager defaultManager]removeItemAtPath:self.config.fileURL.path error:nil];}@end

3、数据存取

关系:一个人可以有多只狗。

Dog*dog1=[[Dogalloc]init];dog1.name=@"阿黄";dog1.color=@"黄色";dog1.identify=@"001";Dog*dog2=[[Dogalloc]init];dog2.name=@"阿黑";dog2.color=@"黑色";dog2.identify=@"002";Person*p=[[Personalloc]init];p.name=@"小明";p.age=@(23);p.sex=@"男";[p.dogs addObject:dog1];[p.dogs addObject:dog2];//获取RLMRealm DB对象RLMRealm*db=[DataBasedb];//存入数据库[db beginWriteTransaction];[PersoncreateInRealm:db withValue:p];[db commitWriteTransaction];

用realm brower 打开数据库(上一篇文章有讲到如何下载)

image.png

4、数据删除

//获取RLMRealm DB对象RLMRealm*db=[DataBasedb];//查找实体RLMResults*res=[PersonallObjectsInRealm:db];//删除实体[db beginWriteTransaction];[db deleteObjects:res];[db commitWriteTransaction];

这样的写法看起来没有问题,但是打开数据库就发现了其中的问题,Dog表的数据没有删掉,这个realm数据的一个坑,删除person 对象的数据时,并不会删除关联person的dog对象,要手动删除dog

image.png

修改之后的代码

//获取RLMRealm DB对象RLMRealm*db=[DataBasedb];//查找实体RLMResults*res=[PersonallObjectsInRealm:db];//删除实体[db beginWriteTransaction];for(inti=0;i

image.png

这时能够全部数据都删除了,不会造成数据冗余。我的项目之前由于这个问题造成了血的教训。

5、查找数据

reaml提供很多的查找数据的方式

//查出全表数据

RLMRealm*db=[DataBase db];RLMResults*result=[Person allObjectsInRealm:db];for(inti=0;i

//通过where查询条件

RLMResults *resultWhere = [Dog objectsWhere:@"identify = '001'"];

//通过主键查询

Dog *dog = [Dog objectForPrimaryKey:@"002"];

//通过预言查询

NSPredicate*pre=[NSPredicate predicateWithFormat:@"identify = '002'"];RLMResults*resultPredicate=[[Dog allObjectsInRealm:db]objectsWithPredicate:pre];

ios mysql 创建不同的用户表_移动端iOS系统数据库之Realm(二)表的创建增删改查(多表)...相关推荐

  1. 3. mysql的注解驱动的三种方式_上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。...

    1.引入依赖 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot- ...

  2. node-red mysql的增删改查_通过curl或者http请求对elasticsearch中的数据进行增删改查...

    最近学习elasticsearch的数据存储,整体语法还是比较规则的.可以使用浏览器.postman.命令行等进行操作. elasticsearch官网的解释最官方,请查看下面的地址 1. 查询当前集 ...

  3. 数据库之OrmLite的简单学习:增删改查_两个表

    参考学习网址: 1.android OrmLite 入门 - ziqiang1的专栏 - CSDN博客 http://blog.csdn.net/ziqiang1/article/details/52 ...

  4. Python操纵Mysql数据库的三种方法,实现增删改查

    目录 这里使用的数据库是关系型数据库Mysql 一.首先,需要安装两个库 二.3种实现增删改查的方法 1.  使用原生语句进行增删改查 2. 使用表结构进行增删改查 3. 使用集成ORM类操纵数据库, ...

  5. MySQL笔记(二)基础的增删改查

    这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是简单增删改查.有错误的欢迎大家指出... #增删改查 #创建部门表 CREATE TABLE IF NOT EXISTS tb_dep ...

  6. mybatis是什么_深入解析:Mybatis接口没有实现类为什么可以执行增删改查?

    作者:小傅哥 链接:https://segmentfault.com/a/1190000022767561 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 MyBatis 是一款非常优秀的 ...

  7. Mybatis(17)注解方式增删改查单表

    IUserDao.java /*在mybatis中,CRUD一共有四个注解 * @Select @Insert @Update @Delete*/ public interface IUserDao ...

  8. mysql 原生 添加数据_手撸Mysql原生语句--增删改查

    mysql数据库的增删改查有以下的几种的情况, 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER SHOW 2.DML语句 数据库操纵语言: ...

  9. mysql增删改查要用事务吗_数据库的增删改查、事务与索引

    数据库的增删改查.事务与索引 增删改查 一.查询(SELECT) 二.添加(INSERT) 三.删除(DELETE) 四.更改(UPDATE) 事务 一.事务的概念 二.MySQL数据库中操作事务命令 ...

  10. python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...

    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...

最新文章

  1. 【数据库】sqlite中PRAGMA命令说明
  2. Netty之WebSocket和四种IO介绍
  3. Tir-Hi3559AV100镜像烧写
  4. java项目端口号异常_Pyspark:异常:Java网关进程在向驱动程序发送其端口号之前退出...
  5. html5中加亮文本,html实现高亮关键字
  6. linux之用一张图片说明文件系统结构
  7. linux python whl md5,Python计算一个目录下的所有文件的md5值,在Linux系统下面
  8. 蓝牙耳机声音一顿一顿的_这次让世界听听我们的声音——声阔SoundcoreLiberty2Pro蓝牙耳机...
  9. 项目清理和删除svn信息(转)
  10. Atitit.会员卡(包括银行卡)api的设计
  11. Linux 软件安装位置选择指南
  12. 国内八家域名注册商优缺点比较(转)
  13. Python中使用wxpy定时机器人给微信好友发送每日一文
  14. imx6q 添加intel PCIE网卡
  15. 关于revision 的cover letter
  16. 涉及计算机程序的发明专利申请的解读
  17. iptables 窥探、扫盲
  18. 微软面试题Leetcode 428 n叉树的序列化和反序列化
  19. 计算机网络主机访问网址(建立HTTP)过程
  20. matlab中符号运算求解结果出现的是1i不是li

热门文章

  1. Win2008首次使用关闭的安全选项
  2. Struts2中Struts.xml的作用
  3. 0708 - 今天休息,顺便废了个点子
  4. proc文件系统、sysfs文件系统、kobject操作
  5. 开机时提示F1continue, F2 setup
  6. Wiki你长的为何与众不同--对Wiki独创写作语法原因的思考
  7. linux 去掉csv文件第一行,使用PowerShell删除文本文件的第一行
  8. Cookie的简单理解和使用
  9. javascript 数组操作函数
  10. JWT、OAuth 2.0、session 用户授权实战