你好我在我的swift项目中使用FMDB。我将sqite文件复制到文档目录中并成功。我可以将sqlite文件复制到文件目录文件夹中。 我将数据插入到数据库中:
K$1
它成功插入数据我可以使用sqlite manager(Firefox Add-One插件)在sqlite文件中查看数据。 现在我想使用以下代码从我的表中获取所有数据:
if db.open() {
let InsertQry = "insert into profiles (image_url, name,dob,gender) values ('\(imgName)','\(nameTxt.text!)','\(dobTxt.text!)','\(genderTxt.text!)')"
print("query= \(InsertQry)")
let result = db.executeUpdate(InsertQry, withArgumentsInArray: nil)
if !result {
print(db.lastErrorMessage())
}
else
{
print("Success")
}
}
问题是我要进入if db.open() {
let querySQL = "SELECT * FROM profiles"
let results:FMResultSet? = self.db.executeQuery(querySQL,withArgumentsInArray: nil)
if results?.next() == true {
self.userProfilesArray = NSMutableArray()
while results!.next() {
let profileInfo = NSMutableDictionary()
profileInfo.setObject(results!.stringForColumn("image_url"), forKey: "image_url")
profileInfo.setObject(results!.stringForColumn("name"), forKey: "name")
profileInfo.setObject(results!.stringForColumn("dob"), forKey: "dob")
profileInfo.setObject(results!.stringForColumn("gender"), forKey: "gender")
self.userProfilesArray.addObject(profileInfo)
}
} else {
print("results nil")
}
db.close()
}
语句,但我不打算循环播放,即使数据库中有数据,我也无法获取数据。
答案 0 :(得分:1)
每次调用next()都会消耗一行。如果你的表包含一行,你的while循环将看不到它,因为if语句使用它。
所以用if results?.next() == true {
替换if let results = results {
。这甚至可以将print("results nil")
行转换为准确的行。
将现有的Objective-C代码移植到Swift后,请考虑使用真正的Swift SQLite库:它们将结果集公开为常规集合,以Swift方式处理错误,并且更易于使用。请参阅示例https://github.com/groue/GRDB.swift#fetching-rows