Qt中数据库连接不稳定时的处理:query.exec是否自动重连?
数据库不稳定连接下的查询执行处理
首先明确:绝大多数数据库驱动(比如你代码里用到的这类基于连接对象的驱动)不会在调用query.exec("...")时自动重新打开连接。如果之前db.open()返回false,直接执行查询只会触发连接失败的错误,不会自动重试连接。
针对你后台服务无限循环查询的场景,推荐这样处理:
- 每次执行查询前,先通过
db.isOpen()检查当前连接状态 - 若连接已断开,主动调用
db.open()尝试重连;重连失败时,添加间隔等待后再重试,避免频繁消耗资源 - 只有确认连接有效后,再执行查询;如果查询执行失败(可能中途连接又断了),主动关闭当前无效连接,下次循环重新尝试
给你一段实用的伪代码参考:
while (true) { // 检查并重建数据库连接 if (!db.isOpen()) { bool reconnectSuccess = db.open(); if (!reconnectSuccess) { // 记录连接失败日志 sleep(5); // 5秒后再重试 continue; } } // 执行查询操作 QSqlQuery query(db); if (!query.exec("SELECT * FROM your_target_table")) { // 查询失败,标记连接无效并关闭 db.close(); // 记录查询错误日志 sleep(3); continue; } // 处理查询结果 // ... // 业务逻辑间隔 sleep(10); }
额外提醒:可以给重连操作加个重试次数上限,避免无限重试;同时做好日志记录,方便后续排查连接不稳定的根因。
内容的提问来源于stack exchange,提问作者user18197583
相关产品推荐
相关产品推荐

