Swift GRDB: 如何绑定主键并实现自增功能
在 Swift GRDB 中,我们可以使用 TableDefinition 中的 column(...) 方法来定义表的列。我们可以指定一个列为主键,并且让它自增:
let dbQueue = try DatabaseQueue(path: "path/to/database.sqlite")
try dbQueue.write { db in
try db.create(table: "users") { t in
t.column('id', .integer).primaryKey().autoincrement()
t.column('name', .text)
t.column('age', .integer)
}
}
在上面的示例中,我们创建了一个名为 'users' 的表,并定义了三个列: 'id'、 'name' 和 'age'。我们指定 'id' 列为主键,并使用 autoincrement() 方法让其自增。
在我们将数据写入数据库时,我们可以使用 TableMapping 的 insert(...) 方法来指定要插入的数据,并自动填充自增主键列的值:
struct User: Codable, FetchableRecord, PersistableRecord {
var id: Int64?
var name: String
var age: Int
}
let user = User(name: "John", age: 30)
try dbQueue.write { db in
try user.insert(db)
}
在上面的示例中,我们定义了一个 User 结构体,并使用 PersistableRecord 协议让它可以写入数据库。我们将 user 实例插入了数据库中,并自动填充了主键列 'id' 的值。注意,我们需要将主键列 'id' 声明为一个可选类型,以便在插入新记录时,自增主键列可以填充其值。
如果我们想手动指定主键列的值,我们可以使用 TableMapping 的 insert(...) 方法的另一个重载,该重载接受一个 onConflict 参数,用于处理冲突。我们可以将 onConflict 参数设置为 .replace,以便在主键冲突时更新现有记录:
let user = User(id: 1, name: "John", age: 30)
try dbQueue.write { db in
try user.insert(db, onConflict: .replace)
}
在上面的示例中,我们将 user 实例插入了数据库中,并手动指定了主键列 'id' 的值。我们还将 onConflict 参数设置为 .replace,以便在主键冲突时更新现有记录。
原文地址: https://www.cveoy.top/t/topic/oR9n 著作权归作者所有。请勿转载和采集!