簡體   English   中英

無法使用SWIFT更新數據庫FMDB中的字段

[英]Unable to update a field in database FMDB using SWIFT

這是我要在其中更新表中字段count函數。 但這不是更新值。 查詢是100%好的,因為我已經在外部數據庫軟件中嘗試過了。 可能是我使用了錯誤的函數來執行我的語句?

    func updateLocalCount(var localCounter: Int)
    {
        let contactDB = FMDatabase(path: databasePath as String)
        if contactDB.open()
        {
            let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'"
            let results:FMResultSet? = contactDB.executeQuery(querySQL,
                withArgumentsInArray: nil)
            print(querySQL)
            contactDB.close()
            print("local count \(localCounter)")
        }
        else
        {
            print("Error: \(contactDB.lastErrorMessage())")
        }
    }

您應該將executeUpdate而不是executeQuery用於更新查詢。 通過調用executeQuery (並且從不調用next ),您只是准備了一個查詢,但從未執行過。

因此,它可能類似於以下內容:

func updateLocalCount(counter: Int, title: String) {
    let contactDB = FMDatabase(path: databasePath as String)
    if contactDB.open() {
        defer { contactDB.close() }
        do {
            try contactDB.executeUpdate("UPDATE Darood SET count=? WHERE title=?", values: [counter, title])
        } catch {
            print(error)
        }
    } else {
        print("Error: \(contactDB.lastErrorMessage())")
    }
}

在不相關的觀察中,您會注意到上面我使用了? SQL中的占位符,而不是使用字符串插值構建SQL。 如果不使用占位符,則會面臨一系列可能的問題。

我確定您使用myTitle作為選項值,如果它是可選的,請嘗試

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle!)'"

或將myTitle必填字段,並將空("")分配為默認值。 接着

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM