lxg

导航

 

参考: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();
//    }
 
//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);
    return bRet;
}
posted on 2021-02-24 11:47  lxg_7105  阅读(809)  评论(0编辑  收藏  举报