gpt4 book ai didi

java - JDBC 连接意外变为空

转载 作者:搜寻专家 更新时间:2023-11-01 03:52:24 25 4
gpt4 key购买 nike

我与 JDBC(DB2) 的数据库连接有问题。我最近在代码块上实现了事务管理(提交/回滚),并且我对数据库的所有查询/操作使用相同的连接。我们从不明确关闭每个查询/操作之间的连接。然而,在运行时,我们得到一个异常提示我们的连接无效(关闭/空)。当我逐步调试时,连接字段似乎意外变为空。它看起来是随机的,它永远不会发生在同一条线上。我确定我们不会自己关闭连接!我们在 Tomcat 中使用连接池。

这是一个代码示例:

 try {  
connection = DB.getConnection();
connection.setAutoCommit(false);
savepoint = connection.setSavepoint("avantModif");

/* * Here are some queries and operations that runs without error
when the connection is not null */
connection.commit();

}

catch(Exception e) {

if (connection != null && !connection.isClosed() && savepoint != null)
{
connection.rollback(savepoint);
}

throw e;
}

finally
{
if(connection != null){
connection.close();

}

这是显示连接对象内容的调试器屏幕截图:

enter image description here

这是Tomcat的server.xml中的连接池定义:

  <Resource  
name="jdbc/dbcpGlobal"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.ibm.as400.access.AS400JDBCDriver"
url="jdbc:as400://lvq400/apilib;naming=system;errors=full;date format=iso;prompt=false;trace=false;reconnect=true"
username="[here_is_our_username]" password="[here_is_our_password]"
maxIdle="7" maxActive="15" maxWait="5"
removeAbandoned="true" removeAbandonedTimeout="120" logAbandoned="true"
testOnBorrow="true" testOnReturn="true" validationQuery="select 1 from sysibm/sysdummy1" />

对象不是真正的null,它的内容变成了null!

是否有任何原因导致 JDBC 连接内容变为 null?

最佳答案

我很确定您实际上应该关闭连接。由于你得到的是一个代理对象,“关闭”它只会返回到池中。我猜 Tomcat 会在某个时刻开始终止您的连接,因为它们看起来已被遗弃。发生这种情况时日志中是否有任何内容,因为您有 logAbandoned="true"?

关于java - JDBC 连接意外变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201265/

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