2012-01-12 24 views
1

パフォーマンスを得るために、巨大なデータをsqliteに挿入しようとしていますが、transactionステートメントを使用しています。私のコードは次のようになります。 CSVParser parser;sqliteトランザクションステートメントで準備されたステートメントを使用

query.exec("BEGIN TRANSACTION;"); 
    while (!file.atEnd()) 
    { 
      line = file.readLine(); 
      if (line == "") 
        continue; 
      parser << line.toStdString(); // Feed the line to the parser 
       // Now extract the columns from the line 
      parser >> sCol1 >> sCol2 >> sCol3 >> sCol4; 

      // Method one to insert data 
      sqlQuery = "INSERT INTO Person(phone, name, firstname, lastname) VALUES (" \ 
         "'" + QString(sCol1.c_str()) + \ 
         "','" + QString(sCol2.c_str()) + \ 
         "','" + QString(sCol4.c_str()) + \ 
         "','" + QString(sCol3.c_str()) + "')"; 
      //query.exec(sqlQuery); 

      // Method two to insert data 
      query.prepare("INSERT INTO Person(phone, name, firstname, lastname) VALUES (:phone, :name, firstname, :lastname"); 
      query.bindValue(":phone", QString(sCol1.c_str())); 
      query.bindValue(":name", QString(sCol2.c_str())); 
      query.bindValue(":firstname", QString(sCol4.c_str())); 
      query.bindValue(":lastname", QString(sCol3.c_str())); 
      query.exec(); 
      cout << query.lastError().text().toStdString(); 
     } 

    query.exec("END TRANSACTION;"); 

私は最初の方法を使用する場合、データは正常に挿入されますが、テキストは、この「'」のようなcharcarter含まれている場合、問題が後で発生することがあります。これを避けるために、準備されたステートメントに切り替えました。新しい問題、データの挿入はありません。私が見る唯一のエラー:

パラメータカウント不一致パラメータカウント不一致パラメータカウント 不一致パラメータカウント不一致パラメータカウント不一致パラメータを カウント不一致パラメータカウント不一致パラメータカウント不一致 は、私がここで行方不明ですありますか?

答えて

0

これが原因である場合、私は疑問に思う:

query.prepare("INSERT INTO Person(phone, name, firstname, lastname) 
    VALUES (:phone, :name, firstname, :lastname"); 
               ^^^ 
     missing close paren inside the string^^^ 
+0

前方もう一度、THX表示され、エディタのメイクをスクロール。 – SIFE

関連する問題