qt中的mysql能存入多少行数据_Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)...
SQLite數據庫本質上來講就是一個磁盤上的文件,所以一切的數據庫操作其實都會轉化為對文件的操作,而頻繁的文件操作將會是一個很好時的過程,會極大地影響數據庫存取的速度。例如:向數據庫中插入100萬條數據,在默認的情況下如果僅僅是執行query.exec("insert into DataBase(......) values(......)");就會打開和關閉文件100萬次,所以速度當然會很慢。SQLite數據庫是支持事務操作的,于是我們就可以通過事務來提高數據庫的讀寫速度。事務的基本原理是:數據庫管理系統首先會把要執行的sql語句存儲到內存當中,只有當commit()的時候才一次性全部執行所有內存中的數據庫。下面是一個簡單的QT sqlite數據庫事務的例子:
#include
#include
#include
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<
break;
}
}
// 提交事務,這個時候才是真正打開文件執行SQL語句的時候
db_sqlite.commit();
cout<
}
其實QT 操作sqlite數據庫增加事務的功能就是上面例子中藍色字體標出的兩句話,如果去掉這兩句話,程序又會還原為:打開文件——執行 query.exec(...)——關閉文件。大家可以試一下,添加這兩句即增加事務以后數據插入的速度明顯提高很多。
在入庫和更新過程中按照數據庫事務的思想進行設計:SQLite執行入庫、更新操作的方式是,sql語句執行對象句柄調用庫函數打開文件、調用函數執行sql語句、關閉文件。這樣的執行方式對于數量級別超大的文件的弊端就是每次執行sql語句的時候都要打開文件(假設百萬級數量級的數據,就要打開和關閉文件百萬次),對于數據庫的入庫和更新操作時間主要都浪費到了文件的打開和關閉操作上,所以這里增加事務以解決該問題。
http://cdn.verydemo.com/demo_c278_i9327.html
總結
以上是生活随笔為你收集整理的qt中的mysql能存入多少行数据_Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去掉边框_安卓也有堪比 VOUN 的加边
- 下一篇: oracle text类型_数据库的一些