如何在 Swift 中使用查询语句检索数据?
Posted
技术标签:
【中文标题】如何在 Swift 中使用查询语句检索数据?【英文标题】:How to retrieve the data using query statement in Swift? 【发布时间】:2018-09-18 09:16:01 【问题描述】:我想从名为 cache_image
的表中检索数据,但我不知道该怎么做,我在这里遇到了错误。
func checkCachedImages() ->Bool
database?.open()
var count = Int()
for i in images
do
if let value = database?.executeQuery("SELECT DOWNLOAD_URL FROM CACHED_IMAGE WHERE IMAGE_NAME = ?", withArgumentsIn: [i])
while value.next()
print(value.string(forColumn: "IMAGE_NAME"))
print(value.string(forColumn: "DOWNLOAD_URL"))
count += 1
print(count)
catch
print(error)
database?.close()
if count == images.count
print("The count is \(count)")
return true
return false
我确实有一个名为 cached_image
的表和两个名为 image_name
和 download_url
的列,但是当我尝试使用
print(value.string(forColumn: "IMAGE_NAME")
它正在显示警告:
找不到 image_name 并且对于列“download_url”,它显示的是“Optional("")”
请帮我解决这个问题。
【问题讨论】:
为什么要用大写的“DOWNLOAD_URL”和“IMAGE_NAME” 我不知道,因为在查询语句中它是大写的,所以我用so 能不能把表名和列名改成小写 是的,试过了,但还是一样@QuocNguyen 在 fmdb 的示例中,他们写了try db.executeUpdate("INSERT INTO foo (bar) VALUES (?)", values: [1])"
,您是否仔细检查了您的查询类型,例如(?)
,而不是?
、withArgumentsIn
和values
【参考方案1】:
您无法从结果中读取image_name
,因为它不是SELECT
子句的一部分,但您不需要它,因为您可以从i
获得它
var numberOfRows = 0
var urls: [String] = ()
print("Image name: \(i)")
if let result = try database?.executeQuery("SELECT download_url FROM CACHED_IMAGE WHERE IMAGE_NAME = ?", values: [i])
while result.next()
numberOfRows += 1
let url = result.stringForColumnIndex(0)
urls.append(url)
print("\(url), \(i)")
print(numberOfRows)
【讨论】:
你好@Joakim Danielson 我尝试了上述解决方案,但 print(result.intForColumnIndex(0)) 产生 0 我不知道你在哪里打印的 我要打印download_url,如何获得? 我这样做了,它在url
变量中。只需修改我的打印语句。
让我们continue this discussion in chat。以上是关于如何在 Swift 中使用查询语句检索数据?的主要内容,如果未能解决你的问题,请参考以下文章