qt之sqlite存储大数据

一、前言

目前已知qt使用数据库有两种存储数据的方式,一种是采用QSqlTableModel方式,还有一种是insert语句方式,一直用的数据量比较小,所以一直采用QSqlTableModel方式,偶然做项目,采用了大数据存储,发现QSqlTableModel方式就出现bug了,在一直循环上传数据条目时,连续5900+条时就会导致程序崩溃,多次反复测试都是这个问题,也不知道具体原因,所以想到了第二种方式,采用之后测试一下果然没有问题,连续运行存储7w+条也正常,今天把两种方式都分享出来,一直也没具体写过数据库操作的文章。

二、环境

qt5.7 mingw window8

三、正文

QSqlTableModel方式:
QSqlTableModel *model = new QSqlTableModel(NULL, db);
                   model->setTable("data");
                   model->setEditStrategy(QSqlTableModel::OnManualSubmit);
                   model->select();
                   QSqlRecord record = model->record();
                   QString title[11]={"time","AI1","AI2","AI3","AI4","AI5","AI6","AI7","AI8","AI9","AI10"};
                   record.setValue(title[0],QDateTime::currentDateTime().toString("yyMMddHHmmsszzz"));
                   for(int i=0;i<10;i++)record.setValue(title[i+1],QString::number(AIvalue[i]));
                   model->insertRecord(0, record);
                   model->submitAll();

insert方式:

                   QSqlQuery query(db);
                   QString mInsertStr = QString("INSERT INTO data (time,AI1,AI2,AI3,AI4,AI5,AI6,AI7,AI8,AI9,AI10) VALUES ('%1','%2','%3','%4','%5','%6','%7','%8','%9','%10','%11');").arg(QDateTime::currentDateTime().toString("yyMMddHHmmsszzz")).arg(QString::number(AIvalue[0])).arg(QString::number(AIvalue[1])).arg(QString::number(AIvalue[2])).arg(QString::number(AIvalue[3])).arg(QString::number(AIvalue[4])).arg(QString::number(AIvalue[5])).arg(QString::number(AIvalue[6])).arg(QString::number(AIvalue[7])).arg(QString::number(AIvalue[8])).arg(QString::number(AIvalue[9]));
                   query.prepare(mInsertStr);
                   query.exec();

 

四、结语

更多通过语句操作数据库的方式参照此贴https://www.cnblogs.com/lvdongjie/p/7068530.html

 

你可能感兴趣的:(qt,SQL,qt数据库上传,qt,sqlite,insert)