当前位置:Gxlcms > 数据库问题 > Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good

Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good

时间:2021-07-01 10:21:17 帮助过:247人阅读

需要将多个插入操作放到一个事务中,就可以显著提升插入效率。

QT中使用事务的方法如下:

QSqlDatabase app_database;
// 设置数据库参数
// ...
app_database.transaction(); // 开始一个事务
// 执行SQL操作
// ...
app_database.commit(); // 提交

但项目中需要获取插入后自动生成的id。逐条插入时,可以用QSqlQuery::lastInsertId()方法获取,但使用事务进行批量插入后,就无法用lastInsertId(),因为我们需要获取插入数据的ID集。为了将ID赋给对象,还需要确保与对象的一一对应关系。

因为项目中父对象包含多个子对象,保存在QVector容器中,所以我利用QVector的有序性来保证对象的对应关系。将子对象在QVector中的下标index保存在数据库中,批量插入子对象后,将所有子对象的id和index一同取出,根据index设置相应对象的id。这样,就可以用事务批量插入子对象,再填充子对象的ID。

http://windrocblog.sinaapp.com/?p=835

Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good

标签:对象   cto   有序性   数据库   mysql   插入数据   sqli   优化   log   

人气教程排行