2017-05-29 60 views
0

我使用的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

您需要'sqlite3_exec'。 – rmaddy

回答

0

這裏是答案,信貸@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是對於像選擇結果的查詢,並sqlite3_exec是沒有結果就像插入查詢。