具体情况如下:服务器用的是TOMCAT5.5.12我在ODBC数据源中设置好了SQL SERVER 2000数据库连接,用JAVABEAN连接数据库
代码如下:
=====================
package opendb;
import java.sql.*;
public class openCUSTOMS
{
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr="jdbc:odbc:customs";
Connection conn=null; Statement stmt=null;
ResultSet rs=null;
public openCUSTOMS()
{
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("opendb():"+e.getMessage());
}
}
public ResultSet executeQuery(String sql)
{
rs=null;
try
{
conn=DriverManager.getConnection(sConnStr,"sa","sa"); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql);
}
catch(SQLException ex){
System.err.println("aq.executeQuery:"+ex.getMessage());}
return rs;
}
}
===============
然后在页面中:
===============
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<jsp:useBean id="DBcustoms" scope="page" class="opendb.openCUSTOMS"/>
<%
String sql="............";
ResultSet rs=DBcustoms.executeQuery(sql);
...................
%>
===============
页面的访问和数据的读出,显示都很正常
但是TOMCAT在运行短则一天,长则四五天 会出现以下报错,主要内容如下(是在服务器端的报错)===============
一般性网络错误。请检查网络文档。
===============
在页面显示一些NULLPOINTEXCEPTION之类的错误在WEB页发生错误的同时,公司有一些有客户端程序(C/S的)也是连到这个SQL SERVER上的,会出现数据库连接数目达到最大的报错,(设置为200个)每次都只需要重新启动TOMCAT一切就都恢复正常了,所以我怀疑是TOMCAT上产生的数据库连接没有及时的得到释放,查了两天资料都没有什么进展我想请教下产生这种错误的原因是什么?如果是数据库连接的问题的话,能否说明下怎样才能正确而且有效的将数据库的连接释放,我查阅过一些关于数据库连接池的文档,是用JNDI来直接连接SQL SERVER的,而且都是在TOMCAT里配置数据库连接池ODBC数据源的数据库连接池应该怎样配置?并且将数据库连接有效的利用并且合理释放谢谢
代码如下:
=====================
package opendb;
import java.sql.*;
public class openCUSTOMS
{
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr="jdbc:odbc:customs";
Connection conn=null; Statement stmt=null;
ResultSet rs=null;
public openCUSTOMS()
{
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("opendb():"+e.getMessage());
}
}
public ResultSet executeQuery(String sql)
{
rs=null;
try
{
conn=DriverManager.getConnection(sConnStr,"sa","sa"); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql);
}
catch(SQLException ex){
System.err.println("aq.executeQuery:"+ex.getMessage());}
return rs;
}
}
===============
然后在页面中:
===============
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<jsp:useBean id="DBcustoms" scope="page" class="opendb.openCUSTOMS"/>
<%
String sql="............";
ResultSet rs=DBcustoms.executeQuery(sql);
...................
%>
===============
页面的访问和数据的读出,显示都很正常
但是TOMCAT在运行短则一天,长则四五天 会出现以下报错,主要内容如下(是在服务器端的报错)===============
一般性网络错误。请检查网络文档。
===============
在页面显示一些NULLPOINTEXCEPTION之类的错误在WEB页发生错误的同时,公司有一些有客户端程序(C/S的)也是连到这个SQL SERVER上的,会出现数据库连接数目达到最大的报错,(设置为200个)每次都只需要重新启动TOMCAT一切就都恢复正常了,所以我怀疑是TOMCAT上产生的数据库连接没有及时的得到释放,查了两天资料都没有什么进展我想请教下产生这种错误的原因是什么?如果是数据库连接的问题的话,能否说明下怎样才能正确而且有效的将数据库的连接释放,我查阅过一些关于数据库连接池的文档,是用JNDI来直接连接SQL SERVER的,而且都是在TOMCAT里配置数据库连接池ODBC数据源的数据库连接池应该怎样配置?并且将数据库连接有效的利用并且合理释放谢谢
stmt.close();
conn.close();不过在JSP+JavaBean这样的结构中完成这种操作的代码比较麻烦,所以页面之间最好是传递一个JavaBean对象而不是rs
ResultSet rs=DBcustoms.executeQuery(sql);这种用法仅仅是代码级别的。对程序的复用性、可读性、安全性毫无益处。仅仅是使自己少写了几行代码而已。
http://community.csdn.net/Expert/topic/4462/4462423.xml?temp=.3180353说了很多废话哈。总之你应该在finally块中关闭ResultSet、Statement和Connection
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
//do some work...
}finally{
if(rs!=null)rs.close();
if(st!=null)st.close();
if(conn!=null)conn.close();
}如果这段代码完全属于你的商务逻辑并且你能确定如何处理异常,那么就捕获,否则就抛出,但是finally不可以少。