Swift学习第十二枪----移动数据库王者Realm入门教程

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51636392 今天给大家带来的是堪称是一个可以替代SQLite,Core Data 的以及ORMlibraries的轻量级数据库—Realm移动端数据库。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51636392

今天给大家带来的是堪称是一个可以替代SQLite,Core Data 的以及ORMlibraries的轻量级数据库—Realm移动端数据库。

相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为IOS开发者带来了方便。

Ream提供了五种编程方式的实现。分别是Java,Objective C,Swift,React-Native,tamarin。在前面我着重介绍在Android中的使用。现在来介绍在Swift中得使用。

1 .关于Realm的几个特点:

(1)使用简单,大部分常用的功能(比如插入、查询等)都可以用一行简单的代码轻松完成,学习成本低。
(2)Realm不是基于Core Data,也不是基于SQLite封装构建的。它有自己的数据库存储引擎。
(3)Realm具有良好的跨平台特性,可以在iOS和Android平台上共同使用。代码可以使用 Swift 、 Objective-C 以及 Java 语言来编写。
(4)Realm 还提供了一个轻量级的数据库查看工具(Realm Browser)。你也可以用它进行一些简单的编辑操作(比如插入和删除操作)

2.支持的类型

  1. Realm支持以下的属性类型:Bool、Int8、Int16、Int32、Int64、Double、Float、String、NSDate(精度到秒)以及NSData.
  2. 也可以使用List 和Object来建立诸如一对多、一对一之类的关系模型,此外Object的子类也支持此功能。

3.Realm的安装配置

  1. Realm的官网去下载最新框架:http://static.realm.io/downloads/swift/latest
  2. 拖拽RealmSwift.framework和Realm.framework文件到”Embedded Binaries”选项中。选中Copy items if needed并点击Finish
    这里写图片描述

4.开始获取Realm

//
//  RealmUtil.swift
//  HelloSwfit
//
//  Created by lidong on 16/6/11.
//  Copyright © 2016年 lidong. All rights reserved.
//

import Foundation
import RealmSwift
/// RealmUtil工具类
class RealmUtil {


    private static let instance = RealmUtil()
    // 单例  全局的数据访问接口
    class var sharedInstance: RealmUtil
    {

        struct Static {
            static var onceToken : dispatch_once_t = 0
            static var instance : RealmUtil? = nil

        }

        dispatch_once(&Static.onceToken) {
            Static.instance = RealmUtil()
        }
        return Static.instance!
    }


    /**
     得到Realm

     - returns: <#return value description#>
     */
    func getRealm() -> Realm{

        var config = Realm.Configuration()

        // Use the default directory, but replace the filename with the username
        config.fileURL = config.fileURL!.URLByDeletingLastPathComponent?
            .URLByAppendingPathComponent("realm_demo.realm")

        // 创建一个有配置的realm
        let realm = try! Realm(configuration: config)

        return realm

    }
}

5.创建RealmSwift.Object

//
//  Dog.swift
//  HelloSwfit
//
//  Created by lidong on 16/6/11.
//  Copyright © 2016年 lidong. All rights reserved.
//

import UIKit

import RealmSwift

class Dog: Object {
    dynamic var name = ""
    dynamic var age = 0
}

class Person: Object {
    dynamic var name = ""
    dynamic var picture: NSData? = nil // optionals supported
    var dogs = List<Dog>()
}

6.开始对数据库进行简单的增删改查的操作

//
//  HandleData.swift
//  HelloSwfit
//
//  Created by lidong on 16/6/11.
//  Copyright © 2016年 lidong. All rights reserved.
//

import Foundation
import RealmSwift
/// 处理数据
class HandleData {

    /**
     添加一个狗

     - parameter dog: <#dog description#>
     */
    func addDog(dog:Dog){
        let  realm = RealmUtil.sharedInstance.getRealm()

        try! realm.write {
            realm.add(dog)
        }
    }


    /**
     修改一个狗的信息
     - parameter dog: <#dog description#>
     */
    func updateDog(dog:Dog){
        let  realm = RealmUtil.sharedInstance.getRealm()
        try! realm.write {
            realm.add(dog,update:true)
        }
    }



    /**
     删除一个狗的信息
     - parameter dog: <#dog description#>
     */
    func deleteDog(dog:Dog){
        let  realm = RealmUtil.sharedInstance.getRealm()
        try! realm.write {
            realm.delete(dog)
        }
    }
    /**
     查询所有狗的信息

     - returns: <#return value description#>
     */
    func findAll(code:String)  -> RealmSwift.Results<Dog> {

    let  realm = RealmUtil.sharedInstance.getRealm()

    let results = realm.objects(Dog.self).filter("age = \(code)")

    return  results
    }


    /**
     添加一个人

     - parameter p:
     */
    func addPerson(p:Person){
        let  realm = RealmUtil.sharedInstance.getRealm()

        try! realm.write {
            realm.add(p)
        }
    }

    /**
     查找所有的用户信息

     - returns: <#return value description#>
     */
    func findAll() ->   RealmSwift.Results<Person>{


        let  realm = RealmUtil.sharedInstance.getRealm()

        let results = realm.objects(Person.self)

        return  results


    }


}

7.在RealmViewController中简单调用

//
//  RealmDemo.swift
//  HelloSwfit
//
//  Created by lidong on 16/6/11.
//  Copyright © 2016年 lidong. All rights reserved.
//

import UIKit
import RealmSwift
class RealmDemo:UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.whiteColor()
       let h =  HandleData()
//        let dog = Dog()
//        dog.age = 2
//        dog.name = "gggg"
//        h.addDog(dog)
//        let dogs1 = List<Dog>()
//        dogs1.append(dog)
//        
//        let person = Person()
//        person.name = "lidong"
//        person.dogs = dogs1
//        
//        h.addPerson(person)

      let result =   h.findAll()
        print(result)
    }

}

代码地址:

数据中得数据

相关文章
|
12天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
46 15
|
3月前
|
SQL NoSQL 关系型数据库
数据库学习
【10月更文挑战第8天】
33 1
|
3月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
104 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
3月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
321 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
3月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
112 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
3月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
25 0
|
3月前
|
存储 NoSQL Java
使用 Java 了解和学习 NoSQL 数据库:三个主要优势
使用 Java 了解和学习 NoSQL 数据库:三个主要优势
34 0
|
9天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
34 3
|
9天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
34 3
|
9天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
49 2