Swift GRDB 自动增长主键:使用 encode(to:) 方法绑定自增主键
在 Swift GRDB 中,可以使用 TableDefinition 的 column(_:) 方法来定义主键列,并使用 ColumnDefinition 的 autoincremented() 方法来使其自增。然后,在使用 encode(to:) 方法将数据写入数据库时,可以使用 DatabaseValue.autoincrement() 方法来指定主键值为自增。
以下是一个示例:
import GRDB
// 定义一个数据模型
struct Person: Codable, FetchableRecord, PersistableRecord {
var id: Int64?
var name: String
var age: Int
static let databaseTableName = "persons"
static let idColumn = Column("id")
// 定义表结构
static func setupTable(_ db: Database) throws {
try db.create(table: databaseTableName) { table in
table.column(idColumn).primaryKey().autoincremented()
table.column("name", .text).notNull()
table.column("age", .integer).notNull()
}
}
// 将数据写入数据库
func encode(to container: inout PersistenceContainer) {
container[idColumn] = id ?? .autoincrement
container["name"] = name
container["age"] = age
}
}
// 使用示例
let dbQueue = try DatabaseQueue(path: "path/to/database.sqlite")
try dbQueue.write { db in
try Person.setupTable(db)
var person = Person(name: "Alice", age: 25)
try person.save(db)
print(person.id) // 输出自增的主键值
}
在上面的示例中,我们首先定义了一个 Person 数据模型,并在其中定义了一个自增的主键列 id。然后,在 encode(to:) 方法中,我们使用 DatabaseValue.autoincrement() 方法来指定主键值为自增。在使用 save(_:) 方法将数据写入数据库时,GRDB 会自动为该主键列分配一个自增的值,并将其存储在 id 属性中。
原文地址: https://www.cveoy.top/t/topic/oR8U 著作权归作者所有。请勿转载和采集!