我正在 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。
这是答案,感谢 @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适用于没有结果的查询,如插入。
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |