
sqlite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库 *** 作其实都会转化为对文件的 *** 作,而频繁的文件 *** 作将会是一个很好时的过程,会极大地影响数据库存取的速度。例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行query.exec("insertinto DataBase(......) values(......)");就会打开和关闭文件100万次,所以速度当然会很慢。sqlite数据库是支持事务 *** 作的,于是我们就可以通过事务来提高数据库的读写速度。事务的基本原理是:数据库管理系统首先会把要执行的sql语句存储到内存当中,只有当commit()的时候才一次性全部执行所有内存中的数据库。下面是一个简单的QT sqlite数据库事务的例子:
#include<QtCore/QCoreApplication>
#include<Qtsql>
#include<iostream>
usingnamespace std;
intmain(int argc,char *argv[])
{
QCoreApplicationa(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(inti = 0; i<100000; i++)
bsuccess = query.exec("insert intoDataBase(D_1,D_2,D_3,D_4,D_5) values('TT','TT','TT')");
if (!bsuccess)
{
cout<<"Erroroccur"<<endl;
break;
}
}
提交事务,这个时候才是真正打开文件执行sql语句的时候
db_sqlite.commit();
cout<<"10000条数据耗时:"<<tmpTime.elapsed()<<"ms"<<endl;
其实QT *** 作sqlite数据库增加事务的功能就是上面例子中蓝色字体标出的两句话,如果去掉这两句话,程序又会还原为:打开文件——执行query.exec(...)——关闭文件。大家可以试一下,添加这两句即增加事务以后数据插入的速度明显提高很多。
在入库和更新过程中按照数据库事务的思想进行设计:sqlite执行入库、更新 *** 作的方式是,sql语句执行对象句柄调用库函数打开文件、调用函数执行sql语句、关闭文件。这样的执行方式对于数量级别超大的文件的弊端就是每次执行sql语句的时候都要打开文件(假设百万级数量级的数据,就要打开和关闭文件百万次),对于数据库的入库和更新 *** 作时间主要都浪费到了文件的打开和关闭 *** 作上,所以这里增加事务以解决该问题。 总结
以上是内存溢出为你收集整理的Qt中提高sqlite的读写速度全部内容,希望文章能够帮你解决Qt中提高sqlite的读写速度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)