【发布时间】:2020-09-29 14:58:41
【问题描述】:
我目前正在我的 vs 2017 项目中使用 mysql 连接,我需要检查 wait_timeout 是否超过。不幸的是,超时后连接状态仍然显示为打开。有没有办法在没有 try catch 的情况下进行检查(在我的情况下,try catch 不会捕获抛出的异常)?
【问题讨论】:
-
您要检查什么?
-
我需要检查wait_timeout是否超过
我目前正在我的 vs 2017 项目中使用 mysql 连接,我需要检查 wait_timeout 是否超过。不幸的是,超时后连接状态仍然显示为打开。有没有办法在没有 try catch 的情况下进行检查(在我的情况下,try catch 不会捕获抛出的异常)?
【问题讨论】:
当超过wait_timeout 时,MySQL 服务器简单地关闭连接。不会向客户端“推送”已发生这种情况的通知,因此连接状态不会改变;这只能通过尝试从底层 TCP 套接字读取来检测。 (有关这方面的深入技术文章,请参阅https://github.blog/2020-05-20-three-bugs-in-the-go-mysql-driver/。)对该连接的任何后续使用通常都会引发异常。
有一种方法可以在不抛出异常的情况下测试连接:调用MySqlConnection.Ping;如果连接关闭,它将返回false。
【讨论】:
Ping 抛出异常。