首页| 论坛| 消息
主题:饶了我,MySQL!
介农酥发表于 2024-07-24 10:28
客户现场工控机环境:Windows7MySQL8.0.31 Qt5.15.2
开发环境:Windows11 MySQL8.0.31 Qt5.15.2
最近问了一系列跟数据库使用和ssl的问题,我只能怪我学艺不精。
最开始的时候程序总是崩溃,dump文件显示数据库ssl有问题,最后出问题的是libssl_1_1_x64!SSL_SESSION_set1_hostname+0xac1b这一句。一开始我认为是自己数据库写的不对,后面我改了很久的代码,问题最终也没有解决,还是崩溃,最后我准备将程序放到工控机上运行,但是发现https第二次请求总是指向ssl错误,突然,我又想到干脆关闭mysql的ssl,最后折腾了下mysql,重装了mysql,数据也丢了,终于关闭了ssl验证,果然,程序连续几天不崩溃,我认为问题应该解决了,哪知当晚客户告诉我,设备有问题,我看了下数据没有插进去,我去看了下程序,控制台输出 数据库失去了连接,我在想应该是偶然的吧,到了晚上,我发现过几个小时就会断开连接,白天白班不忙的时候,我过段时间去看下,发现连接都还可以,一到了晚上夜班繁忙的时候,就经常断。我终于知道这是一个问题,我急急忙忙每一个查询前面都加了如下代码:
if (db1.isOpen() == false)
openDataBase();
不一会儿,发现不行,我又搜索了下网络,赶紧看了下qt的手册,发现了数据库有些选项可以设置,连ssl也可以设置,由于不懂,时间也很晚,生产又比较赶,我又加了下面的这一行:
db2.setConnectOptions("MYSQL_OPT_RECONNECT=1");
看看了时间,已经晚上11点多了,就回去了,想着估计也是没有用,但是心理还是抱着侥幸的。
第二天,起来,看群里,果然还是没用,我早上来到设备,看了下数据库,果然,在我走后不久,数据就没插入了。

void Database::openDataBase2()
{
db2.setConnectOptions("MYSQL_OPT_RECONNECT=1");
db2.setHostName("127.0.0.1");
db2 = QSqlDatabase::addDatabase("QMYSQL", "2");
db2.setDatabaseName("zhu-hai_gao-lan-gang_gree_label");
//db2 = QSqlDatabase::addDatabase("QODBC", "2");
//db2.setDatabaseName("singsun");
db2.setUserName("root");
db2.setPassword("8ik,9ol");
bool ok = db2.open();
if (!ok) {
QString errStr = db2.lastError().text();
emit sigError("数据库2打开失败:" + errStr, "database");
emit sigAll("数据库2打开失败:" + errStr, "database");
} else {
emit sigError("数据库2打开成功", "database");
emit sigAll("数据库2打开成功", "database");
}
}
db2运行在线程了,db1在主线程,后面的查询都是直接使用db2或者db1。
我目前想着是不用Qt的方法,使用mysql自带的访问和查询数据库的方式。
或者换数据库?或者降低mysql的版本5.7?
各位有什么建议感激不尽!
回帖(17):
17楼:谢谢各位提供的帮助
16楼:zeuwas:我之前也为这个驱动的事情苦恼了很久,有网址吗,我去看看
 (2024-08-08 09:53) ..
15楼:zeuwas:我之前也为这个驱动的事情苦恼了很久,有网址吗,我去看看
 (2024-08-08 09:53) ..

全部回帖(17)»
最新回帖
收藏本帖
发新帖