1.环境问题解决
在不同平台下最常见问题MYSQL driver not loaded
win:
可以简单理解driver缺少的问题是相关库缺少的问题, qsqlmysql.dll 与 qsqlmysqld.dll 或是 libmysql.dll与libmysql.lib。
linux:
通常百度给的解决方案,需要so文件版本号一致,如果不一致就要重新编译了。
解决Ubuntu环境下,Qt无法连接MySQL问题_LiuCH4NG的博客-程序员秘密 - 程序员秘密https://cxymm.net/article/m0_43404560/95322519
树莓派:
好解决一行命令解决
2.插入速率优化
(1) 多次插入,不要单次插入,例如,一次插入多条数据
(2) 开启事务机制,一般数据库默认自动提交,提交一次,开启关闭一次事务,我们可以在当前代码中直接开启事务插入多条,速率有明显提升。
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.transaction();
//执行插入操作
db.commit();
(3) 执行批处理操作 execBatch()
QString sql = "INSERT INTO heartbreath(RadarName,heart,OutHeart,breath,OutBreath) "
"VALUES(?,?,?,?,?)";
QVariantList vlist_ip;
QVariantList vlist_heart;
QVariantList vlist_outheart;
QVariantList vlist_breath;
QVariantList vlist_outbreah;
QSqlQuery query;
query.prepare(sql);
db.transaction();
int size = arr.count();
for(int i = 0; i< size; i++)
{
vlist_ip << arr[i].ip;
vlist_heart << arr[i].heart;
vlist_outheart << QString::number(outHeart[i]);
vlist_breath << arr[i].breath;
vlist_outbreah << QString::number(outBreath[i]);
}
query.addBindValue(vlist_ip);
query.addBindValue(vlist_heart);
query.addBindValue(vlist_outheart);
query.addBindValue(vlist_breath);
query.addBindValue(vlist_outbreah);
if(!query.execBatch())
{
qDebug()<<query.lastError().text();//输出错误信息
}
db.commit();
3.打包发布至平台找不到驱动解决
程序内部添加一句
QCoreApplication::addLibraryPath("./plugins");
若还是找不到,找相应编译器下对应plugins/sqldrivers,将该目录下的文件拷至发布文件夹下。