• 7175阅读
  • 7回复

[提问]qt数据库连接的断线重连 [复制链接]

上一主题 下一主题
离线bingcaihuang
 

只看楼主 倒序阅读 楼主  发表于: 2011-09-02
如题,请问qt数据库连接如何实现断线重连?自己做了个测试,连接上数据以后,用定时器输出连接的有限性以及打开连接,但手动断开连接后,

void TQSqlDatabase::timerEvent( QTimerEvent * event )
{
    QSqlQuery query(conn);
    query.exec("select top 1 sid from ShowInfoConfig ");
    bool status = query.next();
    qDebug() << conn.isValid() << conn.isOpen() <<status;
}
输出的两个状态依然是true,只有查询的时候才能知道连接的状态,这也太SB了吧……
离线wxj120bw

只看该作者 1楼 发表于: 2011-09-02
回 楼主(bingcaihuang) 的帖子
没明白 不过看输出 应该是三个true吧
离线bingcaihuang

只看该作者 2楼 发表于: 2011-09-03
回 1楼(wxj120bw) 的帖子
是的,连上时输出是三个true,但拔掉网线以后前两个仍然是true,只有最后一个为false
离线wxj120bw

只看该作者 3楼 发表于: 2011-09-03
回 2楼(bingcaihuang) 的帖子
回第一帖时没看到你拔掉网线打印的 拔掉网线后 QSqlDatabase并没有及时刷新 所以isValid(),isOpen()返回true,而执行语句在断开后肯定返回false。
离线bingcaihuang

只看该作者 4楼 发表于: 2011-09-05
回 3楼(wxj120bw) 的帖子
是啊,如果我要实时的监听连接的有效性,岂不是要不停的执行查询?
离线wxj120bw

只看该作者 5楼 发表于: 2011-09-05
回 4楼(bingcaihuang) 的帖子
也许可以不需要 因为断开网络 系统会向上发出一个事件或者消息 你在自己的程序里监听这个事件或者消息 就可以了 windows或linux系统应该有这样的机制
离线bingcaihuang

只看该作者 6楼 发表于: 2011-09-05
回 5楼(wxj120bw) 的帖子
这样只能监听到网络断开啊,假如现实使用中数据库连接出现问题了,但网络并没有断开,这样监听是不准确的……
离线wxj120bw

只看该作者 7楼 发表于: 2011-09-06
回 6楼(bingcaihuang) 的帖子
你说的确实不错 不过没有找到好的解决办法 现在只有执行语句返回失败知道有问题
快速回复
限100 字节
 
上一个 下一个