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

时间:2016-04-22 09:48:21

标签: ios swift sqlite sqlite.swift

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

相关问题

这种类型的问题一般适用于SQL

特别是SQLite

寻找SQLite.swift实现

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

策略

this answer中,Sam Saffron说:

  

如果你一般都在做更新我会......

     
      
  1. 开始交易
  2.   
  3. 进行更新
  4.   
  5. 检查rowcount
  6.   
  7. 如果为0则执行插入
  8.   
  9. 提交
  10.         

    如果你一般都在做插页,我会

         
        
    1. 开始交易
    2.   
    3. 尝试插入
    4.   
    5. 检查主键违规错误
    6.   
    7. 如果我们收到错误,请执行更新
    8.   
    9. 提交
    10.         

      这样就可以避免选择,并且您可以在事务上发声   源码。

这对我来说很有意义,所以在下面我的回答中,我提供的一个例子是"通常做更新"。

2 个答案:

答案 0 :(得分:2)

在此示例中,用户词典存储在自定义键盘上键入的单词。如果单词已经在字典中,则该单词的频率计数增加1.但如果之前没有输入单词,则插入新行,默认频率为1。 / p>

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

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. 开始交易
  2.   
  3. 进行更新
  4.   
  5. 检查rowcount
  6.   
  7. 如果为0则执行插入
  8.   
  9. 提交
  10.   

以下是代码的外观。

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以获取更多帮助。

答案 1 :(得分:0)

请选中此答案,这是学习如何创建表格并在其中插入行的最佳方法。

https://stackoverflow.com/a/28642293/5247430