在GRDB中绑定primaryKey并使其自增,可以通过在表定义的时候使用ColumnDefinitionautoIncremented()方法来实现。例如:

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方法获取所有记录,并打印出每个人的信息

swift GRDB中绑定primaryKey并自增 中文回答

原文地址: https://www.cveoy.top/t/topic/hziJ 著作权归作者所有。请勿转载和采集!

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