簡體   English   中英

JDBC連接意外地變為空

[英]JDBC connection become null unexpectedly

我與JDBC(DB2)的數據庫連接有問題。 我最近在代碼塊上實現了事務管理(提交/回滾),並且我對數據庫上的所有查詢/操作使用相同的連接。 我們從不明確關閉每個查詢/操作之間的連接。 但是,在運行時,我們得到一個異常,表明我們的連接無效(closed / 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();

} 

這是一個顯示Connection對象內容的調試器屏幕截圖:

在此輸入圖像描述

這是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連接內容會變為空?

我很確定你真的應該關閉連接。 因為你得到的是一個代理對象,“關閉”它只會將它返回到池中。 我猜Tomcat在某些時候開始殺死你的連接,因為它們似乎被拋棄了。 發生這種情況時,日志中是否有任何內容,因為您有logAbandoned =“true”?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM