QT进阶之路 :Qt中提高sqlite的读写速度

(使用事务一次性写入100万条数据)实测可用:

SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度。例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行query.exec("insert into DataBase(......) values(......)");就会打开和关闭文件100万次,所以速度当然会很慢。SQLite数据库是支持事务操作的,于是我们就可以通过事务来提高数据库的读写速度。事务的基本原理是:数据库管理系统首先会把要执行的sql语句存储到内存当中,只有当commit()的时候才一次性全部执行所有内存中的数据库。下面是一个简单的QT sqlite数据库事务的例子:

 #include <QtCore/QCoreApplication>
#include <QtSql>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db_sqlite = QSqlDatabase::addDatabase("QSQLITE", "connSQLite");
db_sqlite.setDatabaseName("SQLiteDB.db3");
db_sqlite.open();
QSqlQuery query("", db_sqlite);
bool bsuccess = false;
QTime tmpTime;
// 开始启动事务
db_sqlite.transaction();
tmpTime.start();
for(int i = 0; i<100000; i++)
{
 bsuccess = query.exec("insert into DataBase(D_1,D_2,D_3,D_4,D_5) values('TT','TT','TT','TT','TT')");
 if (!bsuccess)
 {
 cout<<"Error occur"<<endl;
 break;
 }
 
}
// 提交事务,这个时候才是真正打开文件执行SQL语句的时候
db_sqlite.commit(); 
cout<<"10000条数据耗时:"<<tmpTime.elapsed()<<"ms"<<endl;
}

其实QT 操作sqlite数据库增加事务的功能就是上面例子中蓝色字体标出的两句话,如果去掉这两句话,程序又会还原为:打开文件执行 query.exec(...)关闭文件。大家可以试一下,添加这两句即增加事务以后数据插入的速度明显提高很多。

在入库和更新过程中按照数据库事务的思想进行设计:SQLite执行入库、更新操作的方式是,sql语句执行对象句柄调用库函数打开文件、调用函数执行sql语句、关闭文件。这样的执行方式对于数量级别超大的文件的弊端就是每次执行sql语句的时候都要打开文件(假设百万级数量级的数据,就要打开和关闭文件百万次),对于数据库的入库和更新操作时间主要都浪费到了文件的打开和关闭操作上,所以这里增加事务以解决该问题。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月19日

热门专题

开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
金诺幼儿园(春城路金诺幼儿园)|昆明官渡区幼儿园,幼儿园报名,官渡区幼儿园,春城路幼儿园,幼儿园招生,学前班,昆明幼儿园,金诺幼儿园,环城南路幼儿园,石井路幼儿园
金诺幼儿园(春城路金诺幼儿园)
云南综合高中|云南综合高中
云南综合高中
一年制中专|中专学历,中专是什么学历,中专是什么,中专有什么专业,中专升大专,一年制中专
一年制中专
昆明综合高中|昆明综合高中
昆明综合高中
卓越综合高中|卓越综合高中
卓越综合高中
云南巨榕教育投资集团有限公司|云南巨榕教育投资集团有限公司,巨榕教育集团,巨榕教育
云南巨榕教育投资集团有限公司
安徽中源管业|安徽中源管业,安徽中源管业mpp电力管,安徽中源管业cpvc电力管,安徽中源管业pe穿线管,安徽中源管业电力管,安徽中源管业排水管,安徽中源管业通信管,安徽中源管业管材
安徽中源管业

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部