【问题标题】:SQLNonTransientConnectionExceptionSQLNonTransientConnectionException
【发布时间】:2018-05-11 11:55:12
【问题描述】:

编辑

我创建了包含加载内容的方法的任务。我需要任务,因为我想在数据加载期间将进度条设置为未确定状态。加载数据时,进度条设置为“1”(完成)。

我想要实现的是:用户登录,但没有连接,所以进度条指示应用程序正在尝试连接,一段时间后,错误消息将弹出,并且在连接丢失时执行此操作用户尝试做一点事。但同样,什么也没发生,这次没有抛出异常。

这一切都在 conn = DriverManager.getConnection(DB_URL, USER, PASS) 处冻结,isValid() 没有帮助。 编辑结束

短版:

当与数据库的连接丢失时,应用程序挂起并且没有抛出异常,所以我没有什么可以捕捉并通知用户问题

长版:

我正在尝试在我的应用程序中模拟“连接丢失”的情况。我想要实现的是显示“与数据库的连接已丢失”对话框窗口,以便用户了解问题。此异常称为 SQLNonTransientConnectionException。我的问题是,我只在登录过程中收到它。我有登录窗口,如果没有连接,则会引发异常。

但是如果用户在登录后失去连接怎么办?就像他成功登录并且在插入/更新某些表期间连接丢失了?在这种情况下,应用程序只是挂断了,它没有响应,也没有抛出异常,所以我没有什么可以捕捉和从用户那里得到问题。

请帮助我如何实现这一目标?

【问题讨论】:

  • 您可以从Connection.isValid 开始,但我相信有一个参数可以添加到 URI 中,如果连接关闭则允许失败。
  • 谢谢大家的建议,两个都试试

标签: java javafx jdbc


【解决方案1】:

这里人们建议使用连接池库而不是自己实现它:What the standard way in jdbc to manage lost connection?。这应该更好地处理连接丢失。 (我自己没有经验)

总结链接,建议使用The DBCP Component

【讨论】:

    【解决方案2】:

    由于某种原因,当我将 catch (SQLNonTansientConnectionException 子句放入 try 语句...而不是 catch (SQLException) 时它起作用了。

    【讨论】:

    • 这完全没有意义,因为SQLNonTansientConnectionExceptionSQLException,所以使用SQLException 的catch 子句也应该捕获SQLNonTansientConnectionException
    • 好吧,我忘了说我在 catch (SQLException) 前面插入了 catch (SQLNonTansientConnectionException 子句。但是现在我有另一个问题
    猜你喜欢
    • 2015-01-27
    • 2017-03-04
    • 2018-12-31
    • 2020-01-27
    • 1970-01-01
    • 2017-12-20
    • 2011-09-04
    • 2017-01-17
    相关资源
    最近更新 更多