我與使用JDBC(DB2)的數據庫連接有問題。我最近在代碼塊上實現了事務管理(提交/回滾),並且對數據庫上的所有查詢/操作使用相同的連接。我們從來沒有顯式關閉每個查詢/操作之間的連接。但是,在運行時,我們會得到一個異常,提示我們的連接無效(關閉/空)。當我逐步調試時,似乎連接字段意外變爲空。它看起來是隨機的,它不會發生在同一條線上。我相信我們不會自己關閉連接!我們在Tomcat中使用連接池。JDBC連接意外變爲空
下面是一個代碼示例:
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" />
對象不是真的null,其內容變爲空!
是否有任何JDBC連接內容會變爲空的原因?
什麼*究竟*你的意思是「連接對象內容」?如果您提供堆棧跟蹤和一些示例代碼,幫助您會容易得多... –
您現在有更多的細節! – Marc
好的,謝謝。現在,'DB.getConnection()'做了什麼?您是否在多個線程中使用相同的連接? –