我在swift中使用sqlite3库,尝试运行多个以冒号分隔的插入语句,如下所示:
INSERT INTO PARAMS VALUES ('t1', 'r1');INSERT INTO PARAMS VALUES ('t2', 'r2');...;...;
我目前的代码是:
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")
}
但只执行第一个查询。我尝试做多个sqlite3_step就像做一个select语句,但第二次调用它时,它返回错误代码21。
答案 0 :(得分:1)
以下是@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")
}
从sqlite文档中,sqlite3_step用于包含choose等结果的查询,而sqlite3_exec用于没有像insert这样的结果的查询。