2017-11-20 12 views
0

처음 실행하면 약 3000 개의 문자열 데이터를 내 앱에 삽입하려고합니다. 내가 가지고있는 문제는 삽입 부분이 15-20 초 정도 지나치게 오래 걸린다는 것입니다. isTransaction 메서드가 올라가는 속도를 높이는 방법을 찾았지만 사용법을 모른다. 온라인에서 많은 예제를 시도했지만 내 상황에 잘 맞지 않는 것 같습니다. 도움말은 대단히 감사하겠습니다.isTransaction을 사용하여 FMDB를 사용하여 3000 개의 문자열 데이터 삽입하기

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() 
    } 
} 

답변

0

신경 끄시는, 문제는 내가해야 할 일을했을 모든 database.close 전에 루프 database.commit()의 전() database.beginTransaction를 추가했다 수정되었습니다(). 속도는 15-20 초에서 0.5 초로 변경되었습니다.