• Realm数据库的使用(二)数据库的添加、删除、修改、查询


    增加:

    // Create object
    Person *author = [[Person alloc] init];
    author.name    = @"David Foster Wallace";
    
    // 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];

    删除:

    Book *cheeseBook = ... // Book stored in Realm
    
    // Delete an object with a transaction
    [realm beginWriteTransaction];
    [realm deleteObject:cheeseBook];
    [realm commitWriteTransaction];
    
    // Delete all objects from the realm
    [realm beginWriteTransaction];
    [realm deleteAllObjects];
    [realm commitWriteTransaction];

    修改:

    // Update an object with a transaction
    [realm beginWriteTransaction];
    author.name = @"Thomas Pynchon";
    [realm commitWriteTransaction];
    
    
    // Creating a book with the same primary key as a previously saved book
    Book *cheeseBook = [[Book alloc] init];
    cheeseBook.title = @"Cheese recipes";
    cheeseBook.price = @9000;
    cheeseBook.id = @1;
    
    // Updating book with id = 1
    [realm beginWriteTransaction];
    [Book createOrUpdateInRealm:realm withValue:cheeseBook];
    [realm commitWriteTransaction];

    查询:

    Realm的对象查询返回一个RLMResults对象。它包含了一系列的RLMObjectRLMResults有一个与NSArray很相似的interface(接口)并且对象可以通过索引(index)下标获取。 但不同于NSArrays的是,RLMResult是归类的——它只能容纳一种RLMObjects类型

    根据种类获取对象

    从realm中获取对象的最基本方法就是 [RLMObject allObjects], 它返回一个RLMResults,里面是查询的子类的所有RLMObject实例。

    // Query the default Realm
    RLMResults *dogs = [Dog allObjects]; // retrieves all Dogs from the default Realm
    
    // Query a specific Realm
    RLMRealm *petsRealm = [RLMRealm realmWithPath:@"pets.realm"]; // get a specific Realm
    RLMResults *otherDogs = [Dog allObjectsInRealm:petsRealm]; // retrieve all Dogs from that Realm

    谓词/条件查询

    如果你对 NSPredicate很熟悉的话, 那么你就已经知道怎么在realm里面查询了。RLMObjects,RLMRealmRLMArray 和 RLMResults都提供很好的方法来查询特定的RLMObjects:只需要传递相应地NSPredicate实例,谓词字符串,谓词格式字符串,就可以获取你想要的RLMObjects实例啦。就和NSObject一样。

    举个例子,下面的代码就是对上面的拓展。 通过调用[RLMObject objectsWhere:], 获得了默认realm数据库中的所有颜色是黄褐色的,名字开头是“B”的狗的实例。

    // Query using a predicate string
    RLMResults *tanDogs = [Dog objectsWhere:@"color = 'tan' AND name BEGINSWITH 'B'"];
    
    // Query using an NSPredicate object
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"color = %@ AND name BEGINSWITH %@",
                                                         @"tan", @"B"];
    tanDogs = [Dog objectsWithPredicate:pred];

    可以参看Apple的Predicates Programming Guide 了解更多关于如何创建谓词

    条件排序

    在很多情况下,我们都希望获取或者查询返回的结果都能按照一定条件排序。所以,RLMArray支持使用指定的属性对数据列进行排序。Realm允许指定一个排序要求并且根据一个或多个属性进行排序。举例来说, 下面代码调用了[RLMObject objectsWhere:where:]对返回的数据”dogs”进行排序,排序的条件是名字的字母表升序:

    // Sort tan dogs with names starting with "B" by name
    RLMResults *sortedDogs = [[Dog objectsWhere:@"color = 'tan' AND name BEGINSWITH 'B'"]
                                   sortedResultsUsingProperty:@"name" ascending:YES];

    链式查询

    Realm查询引擎的一个独特属性就是它能够进行简单快捷的链式查询, 而不需要像传统数据库一样的麻烦。

    举个例子来说,假如你要所有黄褐色的小狗的结果序列,然后从中查找名字开头是“B“的小狗。 你可以发送如下的请求。

    RLMResults *tanDogs = [Dog objectsWhere:@"color = 'tan'"];
    RLMResults *tanDogsWithBNames = [tanDogs objectsWhere:@"name BEGINSWITH 'B'"];

    更多内容请参看官网:Realm-Objective-C

  • 相关阅读:
    python之路——进程
    python之路——操作系统的发展史
    python之路——网络编程
    模块学习之re模块
    day11迭代器、生成器
    day10闭包、函数装饰器
    vnc安装和配置
    单例模式
    代理设计模式
    工厂模式例子
  • 原文地址:https://www.cnblogs.com/Erickson/p/Realm-change.html
Copyright © 2020-2023  润新知