在 Swift GRDB 中,可以使用 Column.autoincremented 属性来实现主键自增。例如,假设有一个名为 Person 的表,其中 id 列是主键:

struct Person: Codable, FetchableRecord, MutablePersistableRecord {
    var id: Int64?
    var name: String
    var age: Int
    
    static let id = Column('id')
    static let name = Column('name')
    static let age = Column('age')
    
    mutating func didInsert(with rowID: Int64, for column: String?) {
        id = rowID
    }
    
    static func createTable(in database: Database) throws {
        try database.create(table: 'person') { t in
            t.column(id, primaryKey: true)
            t.column(name)
            t.column(age)
        }
    }
}

在上面的代码中,id 列被声明为可选的 Int64 类型,并且定义了一个 createTable 方法来创建 person 表。在此方法中,使用 primaryKey 标志将 id 列标记为主键。这意味着每个 Person 实例都必须具有唯一的 id 值。

然后,在编写向数据库插入数据的代码时,可以使用 Column.autoincremented 属性来实现 id 列的自增:

let person = Person(name: 'Alice', age: 25)
try dbQueue.write { db in
    try person.encode(to: db)
    if person.id == nil {
        // 如果 id 为空,则表示插入失败
        print('Failed to insert person')
    } else {
        print('Inserted person with id (person.id!)')
    }
}

在上面的代码中,使用 try person.encode(to: db)person 对象写入数据库。如果 personid 值为空,则表示插入失败。如果插入成功,则可以通过 person.id 属性访问自动生成的主键值。

注意:在使用 Column.autoincremented 属性时,必须将主键列定义为可选的,因为在插入新行时,数据库会自动为主键列生成值。如果将主键列定义为非可选的,则必须在插入新行时为其提供值,否则将引发错误。

Swift GRDB encode(to:) 方法实现主键自增

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

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