Swift GRDB 是一个轻量级的 SQLite 数据库框架,提供简洁易用的 API,方便实现数据的增删改查和使用 FTS 搜索。下面是实现这些功能的步骤:

  1. 创建数据库连接

使用 GRDB 前,需要先创建数据库连接。可以使用以下代码创建一个内存数据库连接:

import GRDB

let dbQueue = DatabaseQueue()
  1. 创建数据表

在 GRDB 中,数据表通过定义模型类来创建。例如,如果要创建一个名为 Person 的数据表,可以定义一个 Person 类并遵循 'TableRecord' 协议:

class Person: Record {
    var id: Int64?
    var name: String
    var age: Int
    
    override class var databaseTableName: String {
        return 'persons'
    }
    
    required init(row: Row) {
        id = row['id']
        name = row['name']
        age = row['age']
        super.init(row: row)
    }
    
    override func encode(to container: inout PersistenceContainer) {
        container['id'] = id
        container['name'] = name
        container['age'] = age
    }
}

在上面的代码中,'databaseTableName' 属性指定了数据表名,'init(row:)' 方法用于从数据库中读取行数据,'encode(to:)' 方法用于将数据写入数据库。

  1. 插入数据

可以使用 'dbQueue.inDatabase' 方法在数据库中执行插入操作,例如:

dbQueue.inDatabase { db in
    var person = Person(name: '张三', age: 20)
    try! person.insert(db)
}
  1. 查询数据

可以使用 'dbQueue.inDatabase' 方法在数据库中执行查询操作,例如:

dbQueue.inDatabase { db in
    let persons = try! Person.fetchAll(db)
    for person in persons {
        print('(person.id!) (person.name) (person.age)')
    }
}

上面的代码中,'Person.fetchAll(db)' 方法返回所有 Person 对象的数组,'fetchAll' 方法可以接受 'QueryInterfaceRequest' 类型的参数,可以使用该类型的方法进一步精细查询。

  1. 更新数据

可以使用 'dbQueue.inDatabase' 方法在数据库中执行更新操作,例如:

dbQueue.inDatabase { db in
    var person = try! Person.fetchOne(db, key: 1)
    person?.name = '李四'
    person?.age = 30
    try! person?.update(db)
}

上面的代码中,'Person.fetchOne(db, key: 1)' 方法返回 ID 为 1 的 Person 对象,然后更新对象的属性并调用 'update(db)' 方法保存到数据库中。

  1. 删除数据

可以使用 'dbQueue.inDatabase' 方法在数据库中执行删除操作,例如:

dbQueue.inDatabase { db in
    var person = try! Person.fetchOne(db, key: 1)
    try! person?.delete(db)
}

上面的代码中,'Person.fetchOne(db, key: 1)' 方法返回 ID 为 1 的 Person 对象,然后调用 'delete(db)' 方法从数据库中删除该对象。

  1. 使用 FTS 搜索

可以使用 'FullTextSearch' 类型来实现 FTS 搜索,例如:

dbQueue.inDatabase { db in
    let persons = try! Person
        .filter(FullTextSearch(matching: '张三', in: [Person.Columns.name]))
        .fetchAll(db)
    for person in persons {
        print('(person.id!) (person.name) (person.age)')
    }
}

上面的代码中,'FullTextSearch' 类型指定了要搜索的文本和列,然后通过 'filter' 方法过滤出符合条件的 Person 对象。

Swift GRDB 数据库操作:增删改查与 FTS 搜索教程

原文地址: https://www.cveoy.top/t/topic/oRfQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录