在sqlite.swift框架中,有一种方法可以提前准备语句,然后在执行之前绑定变量



我将sqlite用于我的持久商店。我使用基于内存商店的主键的字典: var localContext = [String: GrandLite]()

我使用下面的功能从字典或数据库中检索对象,然后存储在字典中。此功能经常被调用,我正在尝试优化它。

class func retrieveByKey<T: GrandLite>(aType: [T], thisKey: String) -> T? {
    let thisStack = FoodysLiteStack.thisDataStack
    if let thisObject = thisStack.localContext[thisKey] as? T {
        return thisObject
    } else {
        do {
            let db = thisStack.localDatabase
            let thisTable = T.getTable()
            if let thisRow = try db.pluck(thisTable.filter(uuidKeyLite == thisKey)) {
                let thisObject = T(withRow: thisRow)
                thisStack.localContext[thisKey] = thisObject
                return thisObject
            } else {
                return nil
            }
        } catch {
            NSLog("WARNING: Unhandled error for T retrieveByKey")
            return nil
        }
    }
}

我了解sqlite.swift拔出基本上是限制1的准备。此外,准备编译SQL语句,绑定变量并执行它。我试图避免每次调用此功能时避免使用SQLITE编译时间。

在sqlite.swift框架中,是否可以提前准备语句,然后在执行之前绑定变量?您可以使用db.prepare和db.run进行插入和更新,但是我看不到一种可以绑定已准备好的选择语句的变量的方法。我可能对此有所思考, thisTable.filter(uuidKeyLite == thisKey)上的sqlite编译时间可能很小。

该框架尽力将这些细节抽象出来。

保留准备好的语句的唯一方法是使用函数执行RAW SQL。

是的,在sqlite中,准备头顶通常很小;最典型的性能问题来自不将多个语句合并为单个交易。

我可能对此有所思考,thistable.filter(uuidkeylite == thiskey)上的sqlite编译时间可能很小。

我想你愿意。尤其是使用sqlite.swift,与内部机制相比,该声明汇编时间目前可以忽略不计。请参阅比较Swift Sqlite库的性能

相关内容

  • 没有找到相关文章

最新更新