gpt4 book ai didi

ios - 如何使用 SQLite.swift 更新或插入

转载 作者:IT王子 更新时间:2023-10-29 06:29:09 26 4
gpt4 key购买 nike

如果该行已经存在,我想更新该行的列,但如果它还不存在,那么我想插入一个新行。

相关问题

这种题型一般是SQL比较流行的

尤其是 SQLite

寻找 SQLite.swift 实现

我试图通过使用 SQLite.swift 来节省开发时间用于 iOS 开发的包装器。我选择这个框架是因为它是 recommended on raywenderlich.com .我认为有一个更新或插入的语法示例会很有用。

策略

this answer , Sam Saffron 说:

If you are generally doing updates I would ..

  1. Begin a transaction
  2. Do the update
  3. Check the rowcount
  4. If it is 0 do the insert
  5. Commit

If you are generally doing inserts I would

  1. Begin a transaction
  2. Try an insert
  3. Check for primary key violation error
  4. if we got an error do the update
  5. Commit

This way you avoid the select and you are transactionally sound onSqlite.

这对我来说很有意义,所以在我下面的回答中,我提供了一个“通常进行更新”的示例。

最佳答案

在此示例中,用户词典存储在自定义键盘上键入的单词。如果该词已在词典中,则该词的频率计数递增 1。但如果该词之前未输入过,则会插入一个新行,默认频率为 1。

该表是使用以下架构创建的:

let userDictionary = Table("user_dictionary")
let wordId = Expression<Int64>("id")
let word = Expression<String>("word")
let frequency = Expression<Int64>("frequency")

// ...

let _ = try db.run( userDictionary.create(ifNotExists: true) {t in
t.column(wordId, primaryKey: true)
t.column(word, unique: true)
t.column(frequency, defaultValue: 1)
})

从问题中得出,这就是我们想要做的:

  1. Begin a transaction
  2. Do the update
  3. Check the rowcount
  4. If it is 0 do the insert
  5. Commit

代码如下所示。

let wordToUpdate = "hello"

// ...

// 1. wrap everything in a transaction
try db.transaction {

// scope the update statement (any row in the word column that equals "hello")
let filteredTable = userDictionary.filter(word == wordToUpdate)

// 2. try to update
if try db.run(filteredTable.update(frequency += 1)) > 0 { // 3. check the rowcount

print("updated word frequency")

} else { // update returned 0 because there was no match

// 4. insert the word
let rowid = try db.run(userDictionary.insert(word <- wordToUpdate))
print("inserted id: \(rowid)")
}
} // 5. if successful, transaction is commited

参见 SQLite.swift documentation寻求更多帮助。

关于ios - 如何使用 SQLite.swift 更新或插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36790444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com