做了一个jsp网站,tomcat服务器,jdbc连接sql server,使用连接池的,类文件中连接代码如下:
      Class.forName(DataBaseDriver);
            Context initCtx=new InitialContext();
            DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/connectDB");
            conn=ds.getConnection();
            stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
tomcat的server.xml文件中,配置如下:
<Context path="/check" docBase="D:/net" debug="0" privileged="true" reloadable="true">
<Resource name="jdbc/connectDB" auth="Container" 
    type="javax.sql.DataSource"
    driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    url="jdbc:microsoft:sqlserver://192.168.0.32:1433;DatabaseName=foodcheck" username="sa"
    password="123456" maxActive="10" maxIdle="5" maxWait="-1" />
</Context>tomcat刚打开,网站运行是正常的,但是程序中,有个循环统计功能,每次一运行之后,使用netstat -n一看,建立了好多数据库的连接,状态都是established的。
每次使用resultset,close掉的,conn和stmt也是close掉的,并且还设置为了null,这个我做过log,确定的。
就算把运行的网页关闭,与数据库的连接还是建立着的,这样时间一长,就会出现[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket错误,因为window xp系统允许的匿名端口到了最大值,无法为新的数据库连接分配端口了
只有重启tomcat,所以的连接才被断掉。本然如果与数据库交互不多的话,可以通过设置tomcat重启来解决问题,但是现在因为循环统计功能的存在,这个方法不能用,况且这个方法也是治标不治本的另外我的sql server2000打的是sp4的补丁,jdbc是sp3的补丁。不知道大家有没有碰到过类似的问题,已经搞了三天的,1433端口也试过用2433的,但是都解决不了问题