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