if(ds==null) { System.out.println("ds is null空了,没有匹配的服务器"); throw new Exception("没有匹配数据库连接");
}
conn=ds.getConnection(); return conn; } catch(Exception e) { System.out.println("initCtx is null空了,没有匹配的服务器"); System.out.println("data base is error"); e.toString();
连接BEAN
package com.digfa;import java.sql.*;
import javax.sql.DataSource;
import javax.naming.*;public class ConnectDB
{
static Connection conn = null;
public ConnectDB()
{
}
public static Connection getConnection()
{
Context initCtx = null;
try
{
initCtx=new InitialContext();
if(initCtx==null) {
System.out.println("initCtx is null空了,没有匹配的服务器");
throw new Exception("没有匹配的服务器环境");
}
DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/joke");
if(ds==null) {
System.out.println("ds is null空了,没有匹配的服务器");
throw new Exception("没有匹配数据库连接");
}
conn=ds.getConnection();
return conn;
}
catch(Exception e)
{
System.out.println("initCtx is null空了,没有匹配的服务器");
System.out.println("data base is error");
e.toString();
}
return null;
}
}
我又用另一个BEAN调用它!
package com.digfa;
import java.sql.*;
import com.digfa.*;public class getPublicNumber
{
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
public getPublicNumber()
{
}
synchronized public ResultSet creatResultSet(String sql) throws SQLException
{
if(conn != null && stmt != null)
{
return stmt.executeQuery(sql);
}
conn=ConnectDB.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
return rs;
}
synchronized public int getUpdate(String sql) throws SQLException
{
if(conn != null && stmt != null)
{
return stmt.executeUpdate(sql);
}
conn=ConnectDB.getConnection();
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
int x = stmt.executeUpdate(sql);
return x;
}
synchronized public void close()
{
try
{
if (rs != null)
{
rs.close();
rs = null;
}
if(stmt != null)
{
stmt.close();
stmt = null;
}
if(conn != null)
{
conn.close();
conn = null;
}
}
catch(SQLException ex)
{
System.out.println("close is error");
ex.printStackTrace();
}
}
}
jsp页面调用代码为:
<jsp:useBean id = "gpn" scope="page" class="com.digfa.getPublicNubmer" ></jsp:useBean>
<%
try
{
ResultSet rs = gpn.creatResultSet("select * from a1");
while(rs.next())
{
^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
}
catch(Exception e)
{
throw Exception("is error");
}
finally
{
gpn.close();
}
%>就这些,请各们哥哥姐姐们看一下有哪方面的问题!
如果你的rs.close();这句出错,则stmt.close();和conn.close();都不会执行了,典型错误!
try
{
ResultSet rs = gpn.creatResultSet("select * from a1");
while(rs.next())
{
^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
rs.close();
stmt.close();
conn.close(); }
{
if(conn != null && stmt != null)
{
return stmt.executeUpdate(sql);
}
conn=ConnectDB.getConnection();
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
int x = stmt.executeUpdate(sql);
return x;
}这里搞了两套Connect,Statement了,如果你的datasource没有采用pool技术的话,那么你占用的连接会随着你这个getUpdate的调用而越来越多。
因为如果出现 根本没有 调用 rs.next 就去关闭 rs 也会出错,但这是代码写错了, 不算 exception , 要看日志, 但绝大多数都是可以忽略的.
同样也可以配置连接池,名字都不变,完全不用改源代码。然后用它做服务器,它有个好处就是可以观察你的WEB应用中的连接池中的连接数,最大多少个,已创建多少个,目前可以多少个,正在使用的个数。
如果你的连接没有释放,那么正在使用的个数就是表明你的程序中目前有多少个连接没有释放。这样一来,可以找到问题的原因,如果不是这个再继续找其它的。