在使用 sqlite、fmdb 和 swift 时遇到问题

Having trouble with sqlite, fmdb and swift

我真的很困惑如何将 sqlite 与 Swift 一起使用。我的 INSERT 查询执行时没有任何错误,但是当我打开数据库时,应该添加的数据不存在。我正在使用 FMDB 包装器。

这是我的代码:

let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String

let path = documentsFolder.stringByAppendingPathComponent("currencylite.db")

let database = FMDatabase(path: path)

if !database.open() {
        println("Unable to open database")
        return

    } else {
        if database.open() {

let querySQL = "INSERT INTO currencyrates (baseccy, matchccy, rateccy, date) VALUES ('\(base)', '\(currency)', \(frate), '\(updtdate)')"
println(querySQL)                            

 database.executeQuery(querySQL, withArgumentsInArray: nil)
    }

println(querySQL) 回应 INSERT INTO currencyrates (baseccy, matchccy, rateccy, date) VALUES ('AUD', 'ZAR', 9.3683, '2015-06-25') 所以我很确定它不是来自数据而是来自我执行查询的方式...

编辑:

执行查询后,我查看了两个 sqlite 数据库,一个在项目文件夹中,一个在文档文件夹中,但两者都没有更新……虽然我可以很好地阅读内容,但我不能插入 ...

感谢您的帮助!

你应该这样做:

let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String

let path = documentsFolder.stringByAppendingPathComponent("currencylite.db")

let database = FMDatabase(path: path)

if !database.open() {
    println("Unable to open database")
    return

} else {
    if database.open() {

let querySQL = "INSERT INTO currencyrates (baseccy, matchccy, rateccy, date) VALUES (?, ?, ?, ?)"
println(querySQL)                            

database.executeQuery(querySQL, baseccy, matchccy, NSNumber(double: rateccy), date)
}

假设: baseccy: Stringmatchccy: Stringrateccy: Doubledate: String

试试这个:

if !database.executeUpdate("insert into currencyrates (baseccy, matchccy, rateccy, date) values (?, ?, ?, ?)", withArgumentsInArray: [base, currency, NSNumber(double: frate), updtdate]) {
println("insert 1 table failed: \(database.lastErrorMessage())")
                            }