Realm数据库的使用(一)数据库的简单介绍和模型的创建

Realm 是一种可以替代SQLite 和CoreData的移动端数据库

使用前提:

  • iOS >= 7 or Mac OS X >= 10.9
  • Xcode >= 6
  • Both Objective-C & Swift are supported.

安装:

可通过CocoaPods加入项目中

pod serarch ‘Realm‘

Realm浏览器/数据库管理器

可以通过工具查看和浏览数据

Xcode 插件:

一个可以快速创建Realm模型的插件

模型:

Realm 数据模型其实就是传统的OC的类,只不过这里需要继承自RLMObject而不是NSObject

一个简单的Person类模型

 1 #import <Realm/Realm.h>
 2
 3 @interface Person : RLMObject
 4 @property NSString *name;
 5 @property int age;
 6 @property NSDate *birthdate;
 7 @end
 8
 9 // This protocol enables typed collections. i.e.:
10 // RLMArray<Person>
11 RLM_ARRAY_TYPE(Person)

属性(property)种类

Realm支持以下的属性(property)种类: BOOL, bool, int, NSInteger, long, float, double, CGFloat, NSString, NSDate 和 NSData。

也可以使用RLMArray\<_Object_\> 和 RLMObject来模拟对一或对多的关系——Realm也支持RLMObject继承。

属性(property)特性(attributes)

请注意Realm忽略了objective-c的property attributes, 像 nonatomic, atomic, strong, copy, weak 等等。 所以,在写入模型的时候不要使用任何的property attributes。但是,假如你设置了,这些attributes会一直生效直到RLMObject被写入realm数据库。 无论RLMObject在或不在realm中,为getter和setter自定义的名字都能正常工作

数据模型定制

  • +attributesForProperty: 可以被重写来来提供特定属性(property)的属性值(attrbutes)例如某个属性值要添加索引。
  • @interface Book : RLMObject
    @property float price;
    @property NSString *title;
    @end
    
    @implementation Book
    + (NSArray *)indexedProperties {
      return @[@"title"];
    }
    @end
  • +defaultPropertyValues 可以被重写,用以为新建的对象提供默认值。
  • @interface Book : RLMObject
    @property float price;
    @property NSString *title;
    @end
    
    @implementation Book
    + (NSDictionary *)defaultPropertyValues {
        return @{@"price" : @0, @"title": @""};
    }
    @end
  • +primaryKey 可以被重写来设置模型的主键。定义主键可以提高效率并且确保唯一性。
  • @interface Person : RLMObject
    @property NSInteger id;
    @property NSString *name;
    @end
    
    @implementation Person
    + (NSString *)primaryKey {
        return @"id";
    }
    @end
  • ignoredProperties 可以被重写来防止Realm存储模型属性。
  • @interface Person : RLMObject
    @property NSInteger tmpID;
    @property (readonly) NSString *name; // read-only properties are automatically ignored
    @property NSString *firstName;
    @property NSString *lastName;
    @end
    
    @implementation Person
    + (NSArray *)ignoredProperties {
        return @[@"tmpID"];
    }
    - (NSString *)name {
        return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
    }
    @end

    存储对象

  • Rrealm的对象可以被实例化并且被单独使用,和其他常规对象无异。 如果你想要在多个线程中共享或者永久保存以重复使用对象,你必须将其存储到Realm数据库中——这个操作必须在写事务中完成。 你可以参照如下代码添加一个对象:
  • // Create object
    Person *author = [[Person alloc] init];
    author.name    = @"Erickson";
    
    // Get the default Realm
    RLMRealm *realm = [RLMRealm defaultRealm];
    // You only need to do this once (per thread)
    
    // Add to Realm with transaction
    [realm beginWriteTransaction];
    [realm addObject:author];
    [realm commitWriteTransaction];

    等到把这个对象添加到realm数据库里面之后, 可以在多个线程里面共享之。并且从现在开始,所做的每一次更改(必须在一个写事务中完成)也会被永久储存。等到写事务完成,这个更改将对所有共享这个Realm数据库的线程可见。

    需要注意的是,写入操作会相互阻塞,而且其相对应的进程也会受到影响。这和其他的永久数据存储解决方案是一样的,所以建议你使用常用的,也是最有效的方案, 将所有写入放到一个单独的进程中。

    还要注意的是,因为realm的MVCC结构, 读取并不会因为一个进行中的写事务而受到影响。

时间: 2024-10-03 12:38:35

Realm数据库的使用(一)数据库的简单介绍和模型的创建的相关文章

SQL Server数据库的操作流程和连接的简单介绍

学习ADO,免不了要跟数据库打交道,对于初学者来说,如果不整理一下整个流程,那么可能会出现很多的问题,下面简单的介绍数据库的操作流程. 1.     我们最终操作的对像是数据表,在操作数据表之前我们先要明确我们要操作的数据库,因为只有先连接了数据库才能进入数据库操作里面存储的表. 所以才有以下连接数据库的代码: // 数据库连接字符串    string connString = "Data Source=.;Initial Catalog=MySchool;Integrated Securit

数据库里面的数据类型和引擎简单介绍

数据类型(mysql) Int char bit varchar date time datetime text 字符: Char 普通字符串(老老实实占多少是多少) Varchar 可变字符串(占多少用多少) (字符说的是字符个数.字节是说文字存储大小) (除了ASCLL(0~127)码系列占1个字节.其他都是占两个字节) Text 大文本不设置长度(16kb) Longtext 极大文本 日期 Time Date Datime (八个字节)(年月日时分秒) 常用数据类型 Int DECIMA

Realm数据库的简单介绍和使用

给大家介绍一个数据库操作的框架Realm,本文主要以iOS 平台的使用场景为例. realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android: 核心数据引擎由C++打造,并不是建立在SQLite之上的ORM, 拥有独立的数据库存储引擎: 据官方称性能上比sqlite, coredata牛逼,而且使用起来更加简单, 更易入门. 下载地址:https://realm.io/cn/ 使用教程:https://realm.io/docs/objc/

数据库的简单介绍

了解MYSQL 数据库是一个以某种有组织的方式存储的数据集合. 数据库中通过 表 这种结构化的文件来存储某种特定类型的数据,例如: studentID studentName studentAge 20101101 Li Hua 18 20101102 Andy 19 20101103 John 20 上面是一个统计班级学生信息表结构, 一般在一个特定的数据库中,存储着多种多样的 表 结构(表名应该是唯一标示的),各个表结构之间可以维持某种连接关系. 表(table) 某种特定类型数据的结构化清

iOS开发数据库篇—SQLite简单介绍

转自:http://www.cnblogs.com/wendingding/p/3868893.html 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyedArchiver (2)偏好设置:NSUserDefaults (3)Plist存储:writeToFile 提示:上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题.

iOS开发数据库篇—FMDB简单介绍

iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比苹果自带的Core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱 3.FMDB的github地址 https://github.com/ccgus/fmdb 二.核心类 FMDB有三个主要的类 (1)FMDa

让你提前认识软件开发(25):数据库简单介绍

第2部分 数据库SQL语言 数据库简单介绍 数据库是个通用化的综合性的数据集合.它可以供各种用户共享且具有最小的冗余度和较高的数据与程序的独立性. 眼下,国际上主导的大型数据库管理系统有ORACLE.SQL SERVER.SYBASE.INFORMIX和INGRES等. 数据库中经常使用的编程语言是SQL语言,按其功能可分为四大部分: (1) 数据定义语言(Data Definition Language.DDL),用于定义.撤销和改动数据模式. (2) 数据查询语言(Data Query La

[转]Oracle数据库ASH和AWR的简单介绍

在Oracle数据库中,有时我们可能会遇到这样的术语:ASH和AWR,那么它们是怎样产生的呢?它们的作用又是什么呢?本文我们就来介绍这一部分内容.       1.10g之前 用户的连接将产生会话,当前会话记录保存在v$session中:处于等待状态的会话会被复制一份放在v$session_wait中.当该连接断开后,其原来的连接信息在v$session和v$session_wait中就会被删除.这是10g之前的状况.       2.v$session_wait_history与ASH 若是一

SQLite数据库和JPA简单介绍

SQLite数据库和JPA简单介绍 一.SQLite简单使用 SQLite是遵循ACID的关系数据库管理系统,它的处理速度很快,它的设计目标是嵌入式的,只需要几百K的内存就可以了. 1.下载SQLitehttp://www.sqlite.org/download.htmlsqlite-dll-win32-x86-201410071659.zip(294.11 KiB)sqlite-shell-win32-x86-3080600.zip解压在文件夹D:\Database\sqlite下,得到文件s