首页| 论坛| 消息

标题:饶了我,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");
..


#1 [angelus 07-24 10:53]
我都是一次操作,就连接一次数据库的,没有用数据库指针,直接实例的类,函数结束,类就清理了,这样虽然每次操作都要先连接库,但可以保证每次操作前,都是干净的
数据库的连接dll可以直接下载第三方编译好,ssl这块还没出过问题
https://github.com/thecodemonkey86/qt_mysql_driver/releases?page=5
#2 [liulin188 07-24 10:55]
我从来都不用qt 数据库那套东西,我都是直接原始api
#3 回 angelus 的帖子 [介农酥 07-24 10:57]
angelus:我都是一次操作,就连接一次数据库的,没有用数据库指针,直接实例的类,函数结束,类就清理了,这样虽然每次操作都要先连接库,但可以保证每次操作前,都是干净的 (2024-07-24 10:53) 
这样倒也可以哦。这样比较简单,不如先按你这样的,谢谢!
#4 回 liulin188 的帖子 [介农酥 07-24 11:00]
liulin188:我从来都不用qt 数据库那套东西,我都是直接原始api (2024-07-24 10:55) 
那你用了之后,是不是就是不崩了,或者断开了?
#5 回 angelus 的帖子 [介农酥 07-24 11:02]
angelus:我都是一次操作,就连接一次数据库的,没有用数据库指针,直接实例的类,函数结束,类就清理了,这样虽然每次操作都要先连接库,但可以保证每次操作前,都是干净的
数据库的连接dll可以直接下载第三方编译好,ssl这块还没出过问题
https://github.com/thecodemonkey86/qt_mysql_d .. (2024-07-24 10:53) 
我是自己编译的,最开始用的是ODBC,后面用的是dll,但是都解决不了问题。

<< 1 2 3 >> (1/4)

回复 发表
主题 版块