【问题标题】:GRDB.swift requests with swift 3 without going through models[Finish]GRDB.swift 使用 swift 3 请求而不通过模型[完成]
【发布时间】:2017-06-12 10:25:23
【问题描述】:

我无法通过 GRDB.swift 在 SQLite 数据库上进行简单的选择 这是我的代码:

    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 迅捷3 cocoapods 1.2.0.rc.1

【问题讨论】:

    标签: sqlite swift3 xcode8 grdb


    【解决方案1】:

    GRDB 文档says

    一旦获得数据库连接,execute 方法就会执行不返回任何数据库行的 SQL 语句,例如 CREATE TABLE、INSERT、DELETE、ALTER 等。

    所以如果你想获取行,你选择了错误的方法。

    要获取行,请使用获取方法(以 fetch 开头),如 Row Queries 文档章节中所述,我鼓励您阅读。

    例如:

    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)
    }
    

    如果您的游戏类型(结构或类)采用 RowConvertible 协议,您甚至可以编写:

    let games = try dbQueue.inDatabase { db in
        try Game.fetchAll(db, "SELECT * FROM games")
    }
    

    如果Game也采用TableMapping协议,则得到:

    let games = try dbQueue.inDatabase { try Game.fetchAll($0) }
    

    有关这些协议的文档,请参阅 Record

    【讨论】:

    • 您好,非常感谢您花时间解释。事实上,我在连接到我的数据库时也遇到了问题(我不知道自动化的类:相对路径和/或绝对路径),我没有给出正确的方法!你的解释,我的整个时间都极大地帮助了理解这个框架。再次感谢。
    猜你喜欢
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    相关资源
    最近更新 更多