Qt-QSQLITE QSqlTableModel

QSqlTableModel使用-批量插入数据


一般数据量小的时候使用insert命令直接插入数据, 但insert命令效率比较低,数据量大了就不适用了(测试插入6000条数据需要63s,每条约105ms)
下面测试用QSqlTableModel向数据库插入6000条数据,每条数据大约70Byte,并测试所用时间

 //sql_tt是已经创建好的数据库文件,并且已经打开了,
 //sql_tt里面包含表tttt,表内容如下
 //date int , time  int, p_id int, c_id int, value varchar(20), info   varchar(60)
 QSqlTableModel * md_test = new QSqlTableModel(0, sql_tt);
 //设置 数据需要提交后才能写入数据库
 md_test->setEditStrategy(QSqlTableModel::OnManualSubmit);
 md_test->setTable("tttt");//将model绑定到数据库sql_tt中的表tttt上
 md_test->select();
 while (md_test->canFetchMore())//这个while解决只能读取256行的问题
    md_test->fetchMore();
 int maxcount = md_test->rowCount();//总条数

 qDebug()<<QTime::currentTime();//第一次打印时间

 int rowcount = 6000;
 if(md_test->insertRows(maxcount,rowcount))//向model插入6000行,这时每行还没有内容
     qDebug("insertRows ok");
 else
     qDebug("insertRows failed");
 //设置每行的内容
 for(int i=0; i<rowcount; i++)
 {
     md_test->setData(md_test->index(maxcount+i,0),maxcount+i);
     md_test->setData(md_test->index(maxcount+i,1),87654321);
     md_test->setData(md_test->index(maxcount+i,2),1);
     md_test->setData(md_test->index(maxcount+i,3),12);
     md_test->setData(md_test->index(maxcount+i,4),"1.2345");
     md_test->setData(md_test->index(maxcount+i,5),"Rack#22;Pack#55;cell#66;Voltage=34.5678V");
 }
 md_test->database().transaction();//开始事务操作
 if(md_test->submitAll())//提交操作
 {
     qDebug("submitAll ok");
     md_test->database().commit();//提交  这个提交和上面的提交有什么关系?
     //此时model中的内容已经插入到数据了
 }
 else
     qDebug("submitAll failed");

 qDebug()<<QTime::currentTime();//第二次打印时间

程序运行后打印结果如下
QTime(“11:11:33.319”)
insertRows ok
submitAll ok
QTime(“11:11:42.978”)
两次打印的时间差为9668ms,计算得每条数据约1.6ms
当然,插入时间是跟主机配置相关的,上面的数据是电脑上运行的速度,在arm上实测速度约为3.16ms/条

发布了5 篇原创文章 · 获赞 0 · 访问量 41

猜你喜欢

转载自blog.csdn.net/Mr_Ding123/article/details/104901548