gpt4 book ai didi

java - 有没有一种安全的方法来判断 JDBC 连接是否仍然正常?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:01 24 4
gpt4 key购买 nike

我们有一个网络服务器处理来自客户端的请求。该 Web 服务器的一个组件与数据库保持连接。

在开始使用连接之前,我需要能够识别连接是否已关闭或以某种方式不再起作用。目前我在做类似的事情:

// Decide connection details on alias.
private String alias = null;
// I must have my own because I prepare statements.
private Connection connection = null;

public Connection getConnection() {
try {
if ( connection.isClosed() ) {
// Start afresh.
connection = null;
}
// ** More tests here to check connection is ok.
if (connection == null) {
// Make a new connection.
connection = Connections.getConnection(alias);
}
} catch (SQLException ex) {
// Cause a NPE further down the line.
connection = null;
}
return connection;
}

遗憾的是,这有时会返回如此陈旧的连接,以至于我会收到各种错误之一。其中一个看起来像:

java.sql.SQLException: Io exception: Software caused connection abort: socket write error

请注意,这只是记录的错误之一,并且这一个发生在闲置大约 72 小时后。

我正在寻找的是一个最小的数据库通用连接测试器,它应该始终如一地判断连接是否已启动、正在运行和稳定。这可能吗?

我不介意针对它运行一个非常小的查询,但它必须与数据库无关并且几乎不需要时间/资源。

顺便说一句:我在 Java 5 下运行,所以 Connection.isValid 不是我的解决方案。


已添加

对于那些后来访问这个问题的人 - 我最终接受了提供的建议并转移到一个真正的连接池,不仅非常容易做到而且所有我的问题都消失了。

唯一奇怪的部分是意识到使用连接池时,您必须在完成连接时关闭连接 - 池拦截关闭并将其返回到幕后的池。

最佳答案

最好的方法是为 Oracle 执行简单的 SQL 语句,如 SELECT 1SELECT 1 FROM DUAL。 (请查看您的数据库以了解特定于供应商的语法。)

如果失败,请刷新连接。这就是像 WebLogic 这样的 Java EE 应用程序服务器所做的测试,如果您将它们配置为这样做的话。

关于java - 有没有一种安全的方法来判断 JDBC 连接是否仍然正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com