参考:https://blog.csdn.net/weixin_35092037/article/details/113110855
1.一条一条进行插入,效率比较慢。
2.采用事务操作,效率较高。
3.采用拼接字符串格式,比事务更高效
SqlServer,MySQL格式如下:
QString strTest1 = QString("insert into table1(time,value,tagname) values('2020-12:21 12:25:23', 11.2,'hello'),('2020-12:21 12:25:23', 11.2,'world')");
Oracle格式如下:
QString strTest1 = QString("insert all into table1(time,value,tagname) values(to_date('2020-12:21 12:25:23','YYYY-MM-DD HH24:MI:SS'), 11.2,'hello') into table1(time,value,tagname) values(to_date('2020-12:21 12:25:23','YYYY-MM-DD HH24:MI:SS'), 11.2,'world') select 1 from dual");
注:Oracle不能直接插入字符串需要用to_date('2020-12:21 12:25:23','YYYY-MM-DD HH24:MI:SS')转换。
可以将多条字符串放入容器中,然后拼接成长串,开启一个定时器定时插入操作!
//参考代码:
bool DBManager::Transaction(const std::vector<QString> &vecSql, bool bRollback)
{
{
//方式一:事务
// bool bRet = false;
// m_sqlDb.transaction();
// QSqlQuery query(m_sqlDb);
// for (auto &strSql : vecSql)
// {
// bRet = query.exec(strSql);
// if (false == bRet)
// {
// if (bRollback)
// {
// m_sqlDb.rollback();
// break;
// }
// }
// }
// if (bRet)
// {
// //事务提交
// m_sqlDb.commit();
// }
// bool bRet = false;
// m_sqlDb.transaction();
// QSqlQuery query(m_sqlDb);
// for (auto &strSql : vecSql)
// {
// bRet = query.exec(strSql);
// if (false == bRet)
// {
// if (bRollback)
// {
// m_sqlDb.rollback();
// break;
// }
// }
// }
// if (bRet)
// {
// //事务提交
// m_sqlDb.commit();
// }
//oracle拼接字符串
bool bRet = false;
QSqlQuery query(m_sqlDb);
QString strTmpSql;
for (size_t i=0; i<vecSql.size(); ++i)
{
if (i == 0)
{
QString strTmp = vecSql.at(i);
strTmpSql += strTmp.replace("insert into", "insert all into");
}
else
{
QString strTmp = vecSql.at(i);
strTmpSql +=strTmp.replace("insert into", "into");
}
}
strTmpSql += "select 1 from dual";
bRet = query.exec(strTmpSql);
QSqlQuery query(m_sqlDb);
QString strTmpSql;
for (size_t i=0; i<vecSql.size(); ++i)
{
if (i == 0)
{
QString strTmp = vecSql.at(i);
strTmpSql += strTmp.replace("insert into", "insert all into");
}
else
{
QString strTmp = vecSql.at(i);
strTmpSql +=strTmp.replace("insert into", "into");
}
}
strTmpSql += "select 1 from dual";
bRet = query.exec(strTmpSql);
return bRet;
}
}