Swift sqlite 如何在一个字符串中运行多个查询(插入、更新等)

Fan*_*ing 0 sqlite swift

我正在 swift 中使用 sqlite3 库,尝试运行多个用分号分隔的插入语句,如下所示:

INSERT INTO PARAMS VALUES ('t1', 'r1');INSERT INTO PARAMS VALUES ('t2', 'r2');...;...;
Run Code Online (Sandbox Code Playgroud)

我目前拥有的代码是:

let multiQueries= "INSERT INTO PARAMS VALUES ('t1', 'r1');INSERT INTO PARAMS VALUES ('t2', 'r2');"
var queryStatement: OpaquePointer? = nil
if sqlite3_prepare_v2(dbPointer, multiQueries, -1, &queryStatement, nil) == SQLITE_OK {
    if sqlite3_step(queryStatement) != SQLITE_DONE {
        print("Cannot execute query")
    }else{
        print("ok")
    }
} else {
    print("Queries could not be prepared")
}
Run Code Online (Sandbox Code Playgroud)

但只执行第一个查询。我尝试像执行 select 语句一样执行多个 sqlite3_step,但第二次调用它时,它返回错误代码 21。

Fan*_*ing 5

这是答案,感谢 @rmaddy 的提示。下面的代码对我来说效果很好。

var errMsg: UnsafeMutablePointer<Int8>? = nil
if sqlite3_exec(dbPointer, multiQueries, nil, nil, &errMsg) != SQLITE_OK {
    print("Cannot execute query")
    if let errMsg = errMsg {
        print(String(cString: errMsg))
    }
}else{
    print("ok")
}
Run Code Online (Sandbox Code Playgroud)

从sqlite文档中,sqlite3_step适用于有结果的查询,如选择,而sqlite3_exec适用于没有结果的查询,如插入。