在使用 QSqlQuery 执行批量插入数据时,可以先将 SQL 语句拼接成一个大字符串再执行,也可以使用 bindValue() 函数绑定参数,以达到批量插入的效果。
下面是一个示例代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("password");
db.setDatabaseName("test");
if (!db.open()) {
qDebug() << "Failed to connect to database!";
return;
}
QSqlQuery query(db);
QString insert_sql = "INSERT INTO test_table (name, age) VALUES ";
for (int i = 0; i < 1000; i++) {
insert_sql += QString("(:name_%1, :age_%1), ").arg(i);
}
// 去除最后一个逗号和空格
insert_sql.chop(2);
query.prepare(insert_sql);
for (int i = 0; i < 1000; i++) {
query.bindValue(QString(":name_%1").arg(i), QString("user%1").arg(i));
query.bindValue(QString(":age_%1").arg(i), QRandomGenerator::global()->bounded(18, 30));
}
if (!query.exec()) {
qDebug() << "Failed to execute query:" << query.lastError().text();
return;
}
qDebug() << "Batch insert success!";
在上面的代码中,我们先通过字符串拼接生成了一个批量插入的 SQL 语句。然后通过 for 循环绑定参数,达到批量插入的效果。最后,执行 exec() 函数提交事务。