使用Swift进行查询并将结果添加到结构中
基于针对Swift()的SQLite教程,我能够成功地执行如下查询(使用原始查询): 但是,如果我将查询的样式更改为:使用Swift进行查询并将结果添加到结构中,swift,sqlite,Swift,Sqlite,基于针对Swift()的SQLite教程,我能够成功地执行如下查询(使用原始查询): 但是,如果我将查询的样式更改为: do { let query = myTable.select(value1, value2, value3, value4).where(identifier == 0) guard let queryResults = try? db.prepare(query) else { print("ERROR") return }
do {
let query = myTable.select(value1, value2, value3, value4).where(identifier == 0)
guard let queryResults = try? db.prepare(query)
else {
print("ERROR")
return
}
//does not work
for row in queryResults {
let data = myStruct(value1: row[0] as! String, value2: row[1] as! String, value3: "", eventDate: row[2] as! String, value4: row[3] as! String)
tableViewData.append(data)
}
//neither working
_ = queryResults.map { row in
let data = myStruct(value1: row[0]! as! String, value2: row[1] as! String, value3: "", eventDate: row[2] as! String, value4: row[3] as! String)
tableViewData.append(data)
}
}
catch let ex {
print("ReadDB error: \(ex)")
}
我得到这个错误:
无法使用“Int”类型的索引为“Row”类型的值下标
有人能帮我吗?从教程中可以看出
//This is from tutorial
let query = users.select(email) // SELECT "email" FROM "users"
.filter(name != nil) // WHERE "name" IS NOT NULL
.order(email.desc, name) // ORDER BY "email" DESC, "name"
.limit(5, offset: 1) // LIMIT 5 OFFSET 1
.select(item)
实际上就是查询本身。所以,无论什么时候
let query=myTable。选择(value1、value2、value3、value4)。其中(identifier==0)
则这是查询;您不需要为db准备任何东西。创建此库的人员已尝试使其更简单,而您只需执行。选择(项)
,而无需创建语句并将其发送到数据库
使用上面的示例,您可以看到查询选择电子邮件,在那里它被过滤、排序和限制。因此,对于您来说,query
就是您想要的queryResult
——我不确定这会返回什么。。。您将在db.prepare(query)
…hrm?上运行query
的结果:这是正确的方法
do {
let query = myTable.select(value1, value2, value3, value4).where(identifier == 0)
guard let queryResults = try? db.prepare(query)
else {
print("ERROR")
return
}
//option 1
for row in queryResults {
let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
tableViewData.append(data)
}
//option 2
_ = queryResults.map { row in
let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
tableViewData.append(data)
}
}
catch let ex {
print("ReadDB error: \(ex)")
}
你能提供教程的链接吗?当然。。。
do {
let query = myTable.select(value1, value2, value3, value4).where(identifier == 0)
guard let queryResults = try? db.prepare(query)
else {
print("ERROR")
return
}
//option 1
for row in queryResults {
let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
tableViewData.append(data)
}
//option 2
_ = queryResults.map { row in
let data = myStruct(value1: try row.get(value1), value2: try row.get(value2), value3: try row.get(value3), value4: try row.get(value4))
tableViewData.append(data)
}
}
catch let ex {
print("ReadDB error: \(ex)")
}