在使用 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: String
、matchccy: String
、rateccy: Double
、date: 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())")
}
我真的很困惑如何将 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: String
、matchccy: String
、rateccy: Double
、date: 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())")
}