swift GRDB 如何实现数据的增删改查和使用fts搜索
Swift GRDB 是一个轻量级的 SQLite 数据库框架,提供了简洁易用的 API,方便实现数据的增删改查和使用 FTS 搜索。下面是实现这些功能的步骤:
- 创建数据库连接
使用 GRDB 前,需要先创建数据库连接,可以通过以下代码创建一个内存数据库连接:
import GRDB
let dbQueue = DatabaseQueue()
- 创建数据表
在 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:) 方法用于将数据写入数据库。
- 插入数据
可以使用 dbQueue.inDatabase 方法在数据库中执行插入操作,例如:
dbQueue.inDatabase { db in
var person = Person(name: "张三", age: 20)
try! person.insert(db)
}
- 查询数据
可以使用 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 类型的参数,可以使用该类型的方法进一步精细查询。
- 更新数据
可以使用 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) 方法保存到数据库中。
- 删除数据
可以使用 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) 方法从数据库中删除该对象。
- 使用 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 对象
原文地址: https://www.cveoy.top/t/topic/hoqB 著作权归作者所有。请勿转载和采集!