Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC连接意外变为空_Java_Tomcat_Jdbc_Db2_Connection Pooling - Fatal编程技术网

Java JDBC连接意外变为空

Java JDBC连接意外变为空,java,tomcat,jdbc,db2,connection-pooling,Java,Tomcat,Jdbc,Db2,Connection Pooling,我与JDBC(DB2)的数据库连接有问题。我最近在一个代码块上实现了事务管理(commit/rollback),并且对数据库上的所有查询/操作使用相同的连接。我们从不明确关闭每个查询/操作之间的连接。然而,在运行时,我们得到一个异常,表明我们的连接无效(closed/null)。当我一步一步地调试时,连接字段似乎意外地变为null。它看起来是随机的,而且不会发生在同一条线上。我确信我们自己不会关闭连接!我们在Tomcat中使用一个连接池 下面是一个代码示例: try { connecti

我与JDBC(DB2)的数据库连接有问题。我最近在一个代码块上实现了事务管理(commit/rollback),并且对数据库上的所有查询/操作使用相同的连接。我们从不明确关闭每个查询/操作之间的连接。然而,在运行时,我们得到一个异常,表明我们的连接无效(closed/null)。当我一步一步地调试时,连接字段似乎意外地变为null。它看起来是随机的,而且不会发生在同一条线上。我确信我们自己不会关闭连接!我们在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();

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

以下是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" />

对象不是真的空,它的内容变成空


JDBC连接内容变为空有什么原因吗?

我很确定您实际上应该关闭连接。因为您得到的是一个代理对象,“关闭”它只会将其返回到池中。我猜Tomcat在某个时候开始破坏你的连接,因为它们看起来被抛弃了。发生这种情况时,日志中是否有任何内容,因为您已经放弃了logretained=“true”

“连接对象内容”到底是什么意思?如果您提供一个堆栈跟踪和一些示例代码,那么帮助您就容易多了……现在您有了更多的细节!好的,谢谢。现在,
DB.getConnection()
做什么?您是否在多个线程中使用相同的连接?它从tomcat连接池返回一个连接。我在帖子中添加了连接池定义(在Tomcat的server.xml中)。该连接不与其他线程共享。谢谢你的关注!在调试器中单步执行代码需要多长时间?如果超过120秒,也许这就是问题所在。。。连接池认为它已被放弃,并将其关闭。感谢您的回复。我们确保在Tomcat日志中记录了所有异常,并且在尝试执行sql查询时,我们可以看到的唯一异常类似于“错误:连接已关闭”。当我们停止在连接对象上使用事务(提交、回滚)时,问题就消失了。我们设法在抛出任何异常时手动回滚。问题解决了,但我仍然不知道是什么原因造成的!