swift GRDB中绑定primaryKey并自增 中文回答
在GRDB中绑定primaryKey并使其自增,可以通过在表定义的时候使用ColumnDefinition的autoIncremented()方法来实现。例如:
struct Person: Codable, FetchableRecord, PersistableRecord {
var id: Int64?
var name: String
var age: Int
static let databaseTableName = "persons"
enum Columns {
static let id = ColumnDefinition.id.autoIncremented()
static let name = ColumnDefinition.column(CodingKeys.name)
static let age = ColumnDefinition.column(CodingKeys.age)
}
init(id: Int64? = nil, name: String, age: Int) {
self.id = id
self.name = name
self.age = age
}
}
在上面的代码中,Columns.id定义了一个自增的主键列。在插入新记录时,可以不为id字段赋值,它会在插入时自动递增。
下面是一个使用Person表的示例:
let dbQueue = try! DatabaseQueue(path: "path/to/database.sqlite")
try! dbQueue.write { db in
try db.create(table: "persons") { t in
t.column(Person.Columns.id)
t.column(Person.Columns.name)
t.column(Person.Columns.age)
}
}
try! dbQueue.write { db in
var person = Person(name: "John", age: 25)
try person.insert(db)
person = Person(name: "Jane", age: 30)
try person.insert(db)
let persons = try Person.fetchAll(db)
for person in persons {
print("ID: \(person.id!), Name: \(person.name), Age: \(person.age)")
}
}
在上面的例子中,我们首先创建了一个persons表,然后插入了两个记录。在插入时,不需要为id字段赋值,它会自动递增。最后,我们通过fetchAll方法获取所有记录,并打印出每个人的信息
原文地址: https://www.cveoy.top/t/topic/hziJ 著作权归作者所有。请勿转载和采集!