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

时间:2017-05-29 14:42:44

标签: swift sqlite

我在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。

1 个答案:

答案 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这样的结果的查询。