交易结束后触发操作

时间:2016-05-12 18:14:02

标签: sqlite sqlite.swift

我正在使用Stephen Celis iOS lib来处理SQLite3数据库,here is the github link

以git为例:

try db.transaction {
    let rowid = try db.run(users.insert(email <- "betty@icloud.com"))
    try db.run(users.insert(email <- "cathy@icloud.com", managerId <- rowid))
}
// BEGIN DEFERRED TRANSACTION
// INSERT INTO "users" ("email") VALUES ('betty@icloud.com')
// INSERT INTO "users" ("email", "manager_id") VALUES ('cathy@icloud.com', 2)
// COMMIT TRANSACTION

我尝试实现commitHook块,但是每次插入都会触发它。我只想在发送所有请求时触发一个动作:-D

我该怎么办?

干杯

编辑: 这是我实现提交钩子的方法。

for bay in list{
    try! self.themanager.db.transaction {
        try! self.themanager.db.run(self.themanager.bays.insert(
            //insert values    
        ))

        self.themanager.db.commitHook({
            print("end commit hook")
        })
    }
}

也许它与我的主循环相关:/

1 个答案:

答案 0 :(得分:0)

From SQLite TRIGGER docs:

  

目前,SQLite仅支持FOR EACH ROW触发器,不支持FOR EACH STATEMENT触发器。因此,显式指定FOR EACH ROW是可选的。 FOR EACH ROW表示可以对引起触发器触发的语句插入,更新或删除的每个数据库行执行触发器中指定的SQL语句(取决于WHEN子句)。

Commit钩子像触发器一样工作。不幸的是,尚不支持“ FOR EACH STATEMENT”行为。