用DataSource访问AS400上的DB2的一个表,如果访问两次,就会看到这个表处于文件Open状态,也就是说,表被锁了。
如果用JDBC直连(不用连接池),访问完表就关闭连接,是没有此现象的。
我的程序有什么问题,导致表被锁呢?代码如下:
////////////////////////////////////////
Context ictx = new InitialContext();
DataSource ds = (DataSource) ictx.lookup("java:comp/env/jdbc/as400");
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
con = ds.getConnection();
DatabaseMetaData dbmd = con.getMetaData(); sql = "select * from testdb.TABA ";
st = con.createStatement();
rs = st.executeQuery(sql);
... ... rs.close();
st.close();
con.close();
////////////////////////////////////////server.xml:
//////////////////////////////////////// <Resource name="jdbc/as400" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="100" username="UserXXX" password="PSWXXX" driverClassName="com.ibm.as400.access.AS400JDBCDriver" url="jdbc:as400://ASXXXX;translation isolation =CS;date format=iso;libraries=LIBXXXX;translate binary=true" removeAbandoned="true" removeAbandonedTimeout="1" validationQuery="" />
////////////////////////////////////////web.xml:
////////////////////////////////////////
- <resource-ref>
<res-ref-name>jdbc/as400</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
////////////////////////////////////////
如果用JDBC直连(不用连接池),访问完表就关闭连接,是没有此现象的。
我的程序有什么问题,导致表被锁呢?代码如下:
////////////////////////////////////////
Context ictx = new InitialContext();
DataSource ds = (DataSource) ictx.lookup("java:comp/env/jdbc/as400");
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
con = ds.getConnection();
DatabaseMetaData dbmd = con.getMetaData(); sql = "select * from testdb.TABA ";
st = con.createStatement();
rs = st.executeQuery(sql);
... ... rs.close();
st.close();
con.close();
////////////////////////////////////////server.xml:
//////////////////////////////////////// <Resource name="jdbc/as400" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="100" username="UserXXX" password="PSWXXX" driverClassName="com.ibm.as400.access.AS400JDBCDriver" url="jdbc:as400://ASXXXX;translation isolation =CS;date format=iso;libraries=LIBXXXX;translate binary=true" removeAbandoned="true" removeAbandonedTimeout="1" validationQuery="" />
////////////////////////////////////////web.xml:
////////////////////////////////////////
- <resource-ref>
<res-ref-name>jdbc/as400</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
////////////////////////////////////////
con = ds.getConnection();
con.close();
两次
con = ds.getConnection();
con.close();
Context ictx = new InitialContext();
DataSource ds = (DataSource) ictx.lookup("java:comp/env/jdbc/as400");
Class.forName("com.ibm.as400.access.AS400JDBCDriver");con = ds.getConnection();
DatabaseMetaData dbmd = con.getMetaData();
sql = "select * from testdb.TABA ";
st = con.createStatement();
rs = st.executeQuery(sql);
rs.close();
st.close();
con.close();
con = ds.getConnection();
DatabaseMetaData dbmd = con.getMetaData();
sql = "select * from testdb.TABA ";
st = con.createStatement();
rs = st.executeQuery(sql);
rs.close();
st.close();
con.close();这样还锁?