我无法在SQLite数据库上进行简单的选择,通过GRDB.swift这里是我的代码:
override func viewDidLoad()
{
super.viewDidLoad()
do
{
let dbQueue = try DatabaseQueue(path: "games.sqlite")
try dbQueue.inDatabase
{
db in try db.execute("SELECT * FROM games")
}
}
catch
{
print("Erreur !")
}
}在文档中,我没有发现执行简单选择的简单方法,文档谈到了模型,我希望现在只进行直接查询。这些文档只说明了模型中的错误。
谢谢你们的帮助。
我的环境: Xcode8.2.1 swift3 cocoapods 1.2.0.rc.1
发布于 2017-01-27 08:16:34
GRDB文档他说
一旦授予数据库连接,
execute方法将执行不返回任何数据库行的SQL语句,例如CREATE、INSERT、DELETE、ALTER等。
因此,如果您想要获取行,您选择了错误的方法。
要获取行,您可以使用一个取取方法(从fetch开始),如行查询文档一章所述,我鼓励您阅读该方法。
例如:
let rows = try dbQueue.inDatabase { db in
try Row.fetchAll(db, "SELECT * FROM games")
}
// Now we're back to the main thread: use rows:
for row in rows {
let name: String = row.value(named: "name")
let year: Int = row.value(named: "year")
print(name)
print(year)
}这就是它给出的“不经过模特儿”。
然而,模型仍然很方便:
let games = try dbQueue.inDatabase { db -> [Game] in
let rows = try Row.fetchAll(db, "SELECT * FROM games")
return rows.map { row in
Game(
name: row.value(named: "name"),
year: row.value(named: "year"))
}
}
// Now we're back to the main thread: use games
for game in games {
print(game.name)
print(game.year)
}如果您的游戏类型(struct或class)采用RowConvertible协议,您甚至可以编写:
let games = try dbQueue.inDatabase { db in
try Game.fetchAll(db, "SELECT * FROM games")
}如果游戏也采用TableMapping协议,您将得到:
let games = try dbQueue.inDatabase { try Game.fetchAll($0) }有关这些协议的文档,请参见记录。
https://stackoverflow.com/questions/41882101
复制相似问题