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/hoqB 著作权归作者所有。请勿转载和采集!

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