1

我正在使用 Stephen Celis iOS lib 来处理 SQLite3 数据库,这里是 github 链接

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

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

4

1 回答 1

0

来自 SQLite TRIGGER 文档:

目前 SQLite 仅支持 FOR EACH ROW 触发器,不支持 FOR EACH STATEMENT 触发器。因此,明确指定 FOR EACH ROW 是可选的。FOR EACH ROW 意味着触发器中指定的 SQL 语句可能会被执行(取决于 WHEN 子句)用于由导致触发器触发的语句插入、更新或删除的每个数据库行。

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

于 2018-11-06T10:20:38.523 回答