使用isTransaction在FMDB数据库中插入三千个字符串数据

时间:2017-11-20 19:12:06

标签: ios swift3 fmdb

我试图在首次启动时向我的应用中插入大约3千个字符串数据。我遇到的问题是插入部分花费的时间太长,大约15-20秒。我查找了如何使isTransaction方法更快出现的方法,但我不知道如何使用它。我在网上尝试了很多例子,但似乎并不适合我的情况。非常感谢帮助。

    func insertWordData() {

    if openDatabase() {


        if let path = Bundle.main.path(forResource: "messagesToRead", ofType: "json") {
        var query = ""
        do {
            let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .alwaysMapped)

            let jsonObj = JSON(data: data)
            if jsonObj != JSON.null {
                for (_, jsonObj) in jsonObj {

                    let WordString = jsonObj["FIELD1"]
                    let WordDefinition = jsonObj["FIELD2"]

                    query += "insert into words (\(field_WordID), \(field_WordString), \(field_WordDefinition)) values (null, '\(WordString)', '\(WordDefinition)');"
                }
            }
            if !database.executeStatements(query) {
                print("Failed to insert initial data into the database.")
                print(database.lastError(), database.lastErrorMessage())
            }
            else {
                //print(words)
            }
        } catch let error {
            print(error.localizedDescription)
        }
    } else {
        print("Invalid filename/path.")
        }

        database.close()
    }
}

1 个答案:

答案 0 :(得分:0)

没关系,问题得到解决我只需要在for循环之前添加database.beginTransaction(),在database.close()之前添加database.commit()。速度从15-20秒到0.5秒