ios mysql 创建不同的用户表_移动端iOS系统数据库之Realm(二)表的创建增删改查(多表)...
一、使用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(二)表的创建增删改查(多表)...相关推荐
- 3. mysql的注解驱动的三种方式_上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。...
1.引入依赖 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot- ...
- node-red mysql的增删改查_通过curl或者http请求对elasticsearch中的数据进行增删改查...
最近学习elasticsearch的数据存储,整体语法还是比较规则的.可以使用浏览器.postman.命令行等进行操作. elasticsearch官网的解释最官方,请查看下面的地址 1. 查询当前集 ...
- 数据库之OrmLite的简单学习:增删改查_两个表
参考学习网址: 1.android OrmLite 入门 - ziqiang1的专栏 - CSDN博客 http://blog.csdn.net/ziqiang1/article/details/52 ...
- Python操纵Mysql数据库的三种方法,实现增删改查
目录 这里使用的数据库是关系型数据库Mysql 一.首先,需要安装两个库 二.3种实现增删改查的方法 1. 使用原生语句进行增删改查 2. 使用表结构进行增删改查 3. 使用集成ORM类操纵数据库, ...
- MySQL笔记(二)基础的增删改查
这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是简单增删改查.有错误的欢迎大家指出... #增删改查 #创建部门表 CREATE TABLE IF NOT EXISTS tb_dep ...
- mybatis是什么_深入解析:Mybatis接口没有实现类为什么可以执行增删改查?
作者:小傅哥 链接:https://segmentfault.com/a/1190000022767561 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 MyBatis 是一款非常优秀的 ...
- Mybatis(17)注解方式增删改查单表
IUserDao.java /*在mybatis中,CRUD一共有四个注解 * @Select @Insert @Update @Delete*/ public interface IUserDao ...
- mysql 原生 添加数据_手撸Mysql原生语句--增删改查
mysql数据库的增删改查有以下的几种的情况, 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER SHOW 2.DML语句 数据库操纵语言: ...
- mysql增删改查要用事务吗_数据库的增删改查、事务与索引
数据库的增删改查.事务与索引 增删改查 一.查询(SELECT) 二.添加(INSERT) 三.删除(DELETE) 四.更改(UPDATE) 事务 一.事务的概念 二.MySQL数据库中操作事务命令 ...
- python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...
这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...
最新文章
- 【数据库】sqlite中PRAGMA命令说明
- Netty之WebSocket和四种IO介绍
- Tir-Hi3559AV100镜像烧写
- java项目端口号异常_Pyspark:异常:Java网关进程在向驱动程序发送其端口号之前退出...
- html5中加亮文本,html实现高亮关键字
- linux之用一张图片说明文件系统结构
- linux python whl md5,Python计算一个目录下的所有文件的md5值,在Linux系统下面
- 蓝牙耳机声音一顿一顿的_这次让世界听听我们的声音——声阔SoundcoreLiberty2Pro蓝牙耳机...
- 项目清理和删除svn信息(转)
- Atitit.会员卡(包括银行卡)api的设计
- Linux 软件安装位置选择指南
- 国内八家域名注册商优缺点比较(转)
- Python中使用wxpy定时机器人给微信好友发送每日一文
- imx6q 添加intel PCIE网卡
- 关于revision 的cover letter
- 涉及计算机程序的发明专利申请的解读
- iptables 窥探、扫盲
- 微软面试题Leetcode 428 n叉树的序列化和反序列化
- 计算机网络主机访问网址(建立HTTP)过程
- matlab中符号运算求解结果出现的是1i不是li