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含まれている場合、問題が後で発生することがあります。これを避けるために、準備されたステートメントに切り替えました。新しい問題、データの挿入はありません。私が見る唯一のエラー:
パラメータカウント不一致パラメータカウント不一致パラメータカウント 不一致パラメータカウント不一致パラメータカウント不一致パラメータを カウント不一致パラメータカウント不一致パラメータカウント不一致 は、私がここで行方不明ですありますか?
前方もう一度、THX表示され、エディタのメイクをスクロール。 – SIFE