Realm 数据库使用 您所在的位置:网站首页 realm数据库 Realm 数据库使用

Realm 数据库使用

2023-08-28 16:44| 来源: 网络整理| 查看: 265

Table of Contents(目录)

0. 项目描述

1. Realm模型

2. Realm数据库安装

3. 创建Model

4. 实现CreateRandomDatabase函数创建初始数据库

创建数据库、删除数据库

创建Model实例,修改Model实例,删除Model实例,增、删、改操作

查询Model,查询、排序、分页操作

5. 数据库结构更新,迁移

6. 数据绑定,数据更新通知,观察者模式

0. 项目描述

Realm练习:约车软件,提供4个页面

Tab 1:列出所有当前可约行程Tab 2:列出所有当前用户参与的行程Tab 3:列出所有当前用户参与的留言Tab 4:系统设置页面

本文中只给出了Realm的用法

User Model userName主键:用户名

mobilePhoneNumber

手机号

portraitImage

头像

qrcodeImage

收款二维码

following

外键 User:关注者列表

fans

外键 User:粉丝列表

cars

外键 Car:用户拥有的车辆列表

apps

外键 Appointment:用户发布的所有行程

enrollapps

外键 Appointment:用户参与的所有行程

sendmessages

外键 Message:用户发送的所有信息

receivemessages

外键 Message:用户接受的所有消息

 

Car Model

brand

车辆品牌color车辆颜色id车牌号owner外键 User:车辆拥有者

 

Appointment Model

createDate

行程创建时间

beginDate

行程开始时间

startLocal

行程开始地点

endLocal

行程结束地点

mobilePhoneNumber

行程发布者手机号

customerNumber

行程可预约人数

costPerCustomer

行程每人单价

car

外键 Car:行程所使用的的汽车

customer

外键 User:行程中的所有乘客

owner

外键 User:行程发布者

 

Message Model

msg

信息内容createDate信息创建时间sender外键 User:信息发送人receiver外键 User:信息接收人 1. Realm模型 Realm为关系型数据库,每一个表使用一个Model类表示,每一个列对应Model类中的每一个线程可以拥有一个Realm数据链接,使用class Realm类创建一个链接,该类可以实现数据链接,执行查询,更新数据表结构,数据迁移,数据绑定等操作每一个Model类都继承自Realm库中的class Object类,继承后便可进行数据表的增删改查操作数据表之间的关系由Model类中的属性给出,使用class List以及class LinkingObjects表示外键 可以通过重载Model类中的函数来定义数据表的一些属性,如func primaryKey函数可以定义表格的主键

官方 Realm Swift 文档(英文) ,旧版本有中文版

 

2. Realm数据库安装 安装CocoaPods在Podfile中添加use_frameworks! 和 pod 'RealmSwift'终端中执行pod install使用.xcworkspace文件启动工程 3. 创建Model //表User class User: Object { //属性列 @objc dynamic var userName = "庞兴庆" @objc dynamic var mobilePhoneNumber = "18612345678" @objc dynamic var portraitImage = Data() @objc dynamic var qrcodeImage: Data? = nil //外键 let following = List() let fans = LinkingObjects(fromType: User.self, property: "following") let cars = List() let apps = List() let enrollapps = List() let sendmessages = List() let receivemessages = List() //创建主键 override class func primaryKey() -> String? { return "userName" } } 创建数据表User对应的Model:只要这个类继承自Realm中的Object类即可创建数据表User中的属性列:使用@objc dynamic var PropertyName = defaultValue形式进行创建,对于必填的列(Non-optional)以及非必填列(Optional)的属性定义方式由下表给出。Object,List,LinkingObjects都可以用于外键对应的列 TypeNon-optionalOptionalBool@objc dynamic var value = falselet value = RealmOptional()Int@objc dynamic var value = 0let value = RealmOptional()Float@objc dynamic var value: Float = 0.0let value = RealmOptional()Double@objc dynamic var value: Double = 0.0let value = RealmOptional()String@objc dynamic var value = ""@objc dynamic var value: String? = nilData@objc dynamic var value = Data()@objc dynamic var value: Data? = nilDate@objc dynamic var value = Date()@objc dynamic var value: Date? = nilObjectn/a: must be optional@objc dynamic var value: Class?Listlet value = List()n/a: must be non-optionalLinkingObjectslet value = LinkingObjects(fromType: Class.self, property: "property")n/a: must be non-optional 创建数据表User中的外键:Realm支持一对一、一对多、多对多、以及反向外键,Object与List用于前两种情况创建鼠标表User中的反向外键:LinkingObjects用于定义反向外键,如Car类中的owner类就可以反向查找到拥有者,不需要额外执行查询操作创建数据表User中的主键:重载primaryKey可以定义表格的主键,重载indexedProperties可以定义自增加列,重载ignoredProperties可以定义Model中需要忽略的属性

用同样的方式定义Car类,Appointment类,Message类

4. 实现CreateRandomDatabase函数创建初始数据库 创建数据库、删除数据库 //删除数据库 let realmURL = Realm.Configuration.defaultConfiguration.fileURL! print(realmURL) let realmURLs = [ realmURL, realmURL.appendingPathExtension("lock"), realmURL.appendingPathExtension("note"), realmURL.appendingPathExtension("management") ] for URL in realmURLs { do { try FileManager.default.removeItem(at: URL) } catch { // handle error } } Realm数据库会在当前的iOS应用程序中创建4个文件,realm数据库;realm lock文件;realm note文件;realm management文件使用Realm.Configuration.defaultConfiguration.fileURL可以打印出上述四个文件的位置可以通过配置Configuration文件修改Realm数据库的一些特性,比如数据迁移(下文)用FileManager删除当前已经存在的所有Realm数据库文件 var realm = try! Realm() 创建一个Realm数据库链接,默认情况下链接的为上文中的realm数据库可以使用Configuration类为Realm配置其他属性,如加载外部数据库,加载内存数据,加载远程数据库,数据迁移等 创建Model实例,修改Model实例,删除Model实例,增、删、改操作 //进行Realm数据库写入,在该范围内对Model的任何修改都会自动保存至Realm数据库中 try! realm.write { //创建User实例 let newuser = User() //向Realm数据库,User表中添加一行 realm.add(newuser) //为Car表添加一行 let newcar = Car() newcar.brand = randombrands[Int.random(in: 0..


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有