详解Qt 中如何提高Sqlite读写速度
来源:互联网 发布:cdn用什么软件linux 编辑:程序博客网 时间:2024/06/05 07:02
Qt 中如何提高Sqlite读写速度 是本文要介绍的内容,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语句的时候都要打开文件(假设百万级数量级的数据,就要打开和关闭文件百万次),对于数据库的入库和更新操作时间主要都浪费到了文件的打开和关闭操作上,所以这里增加事务以解决该问题。
原文:http://mobile.51cto.com/symbian-273190.htm
- 详解Qt 中如何提高Sqlite读写速度
- Qt中提高sqlite的读写速度
- Qt中提高sqlite的读写速度
- Qt中提高sqlite的读写速度
- Qt中提高SQLite的读写速度
- Qt中提高sqlite的读写速度
- Qt中提高sqlite的读写速度
- Qt中提高sqlite的读写速度
- Qt中提高sqlite的读写速度
- 提高Qt SQLite读写性能
- Linux下如何提高硬盘读写速度
- 请问如何提高文件的读写速度
- 如何提高多文件读写速度
- Qt提升对SQLite数据库的读写速度
- Qt提升对SQLite数据库的读写速度
- 如何提高oracle的查询速度(详解)
- WEB开发中如何提高网页速度
- 如何有效提高打字速度施工中。。。。。。。。。
- twill编程的注意点
- SAP公开课笔记:基于HANA的软件开发 - 第五周总结
- ajax 批量删除
- spring-jar整理
- Android 富有动感的底部弹出框
- 详解Qt 中如何提高Sqlite读写速度
- 自定义dialog显示在底部
- SAP公开课笔记:基于HANA的软件开发 - 第六周总结
- 单向链表例题
- CentOS7 Subversion安装
- 位图代码
- 驱动加载错误:insmod: error inserting 'hello.ko': -1 Device or resource busy
- 类扩展(extension)
- Windows 下用 repo 下载Android源码 .