解决数据库写入多条数据过慢问题

使用QT写数据到QSLite中。

#include <QSqlDatabase>
#include <QObject>
#include <QDebug>
// 假设数据库名为MYSQLITE, 字段为MYSQLITE1, MYSQLITE2
int main(void) {
	QSqlDatabase *m_pDB = new QSqlDatabase();
	*m_pDB = QSqlDatabase::addDatabase("QSQLITE", "WUMING");

	QString strSqlPath = u8"D:/TEST.db";
	m_pDB->setDatabaseName(strSqlPath);
	if (!m_pDB->open()) {
		qDebug() << u8"数据库打开失败";
		return -1;
	}

	QSqlQuery query(*m_pDB);
	// 插入数据
	for (int i = 0; i < 100000; ++i) {
		QString strSqlText = QString(u8"insert into \"MYSQLITE\"(\"MYSQLITE1\", \"MYSQLITE2\") VALUES ('1', '2')");
		if (!query.exec(strSqlText)) {
			qDebug() << u8"插入数据失败";
			return -1;
		}
	}
	return 0;
}

以上代码可以实现对QSLite简单的数据插入,但是如果是100000条循环插入时,将会导致很慢很慢,原因:exec每次执行都会对db文件的一次打开和关闭,导致耗时较高。如果减少耗时只能通过对文件减少打开和关闭次数,从而减少耗时。这样就可以通过事务的方式来解决该问题。

#include <QSqlDatabase>
#include <QObject>
#include <QDebug>
// 假设数据库名为MYSQLITE, 字段为MYSQLITE1, MYSQLITE2
int main(void) {
	QSqlDatabase *m_pDB = new QSqlDatabase();
	*m_pDB = QSqlDatabase::addDatabase("QSQLITE", "WUMING");

	QString strSqlPath = u8"D:/TEST.db";
	m_pDB->setDatabaseName(strSqlPath);
	if (!m_pDB->open()) {
		qDebug() << u8"数据库打开失败";
		return -1;
	}

	QSqlQuery query(*m_pDB);
	// 开启事务
	m_pDB->transaction();
	// 插入数据
	for (int i = 0; i < 100000; ++i) {
		QString strSqlText = QString(u8"insert into \"MYSQLITE\"(\"MYSQLITE1\", \"MYSQLITE2\") VALUES ('1', '2')");
		if (!query.exec(strSqlText)) {
			qDebug() << u8"插入数据失败";
			m_pDB->rollback();		// 设置回滚,不更改数据库内容。可以理解i之前执行成功的均撤回
			return -1;
		}
	}

	m_pDB->commit();	// 提交事务,将所有的内容全部提交
	return 0;
}

以上代码,执行后先将需要写入文件的内容先写入内存,然后再一次写入文件中。这种方式将只会打开一次db文件,所以耗时较少。从而解决大量数据写入时写入缓慢问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值