把你连接数据的BEAN贴出来看看

解决方案 »

  1.   

    增加一个环境变量JAVA_OPTS=-Xms256m -Xmx512m
      

  2.   

    把你连接数据的BEAN,和调用BEAN的JSP帖了来看看,很可能是你的数据库连接没有释放
      

  3.   

    首先谢谢大家!
    连接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();
    }
    %>就这些,请各们哥哥姐姐们看一下有哪方面的问题!
      

  4.   

    我想这样在try{}catch{}finally{}里面肯定会执行finally的呀而且我还打印出来了在每个页面!都进入finally了呀应该数据都关闭了我没别的想法了,请路过的高手们帮帮忙!
      

  5.   

    不一定会关闭连接的哦
    如果你的rs.close();这句出错,则stmt.close();和conn.close();都不会执行了,典型错误!
      

  6.   

    <%
       try
       {
            ResultSet rs = gpn.creatResultSet("select * from a1");
            while(rs.next())
            {
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
             }
    rs.close();
    stmt.close();
    conn.close();   }
      

  7.   

    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;
       
    }这里搞了两套Connect,Statement了,如果你的datasource没有采用pool技术的话,那么你占用的连接会随着你这个getUpdate的调用而越来越多。
      

  8.   

    close() 方法也应该 try{} catch{} 如果还有错, 写日志. 调试时看日志, 
    因为如果出现 根本没有 调用 rs.next 就去关闭 rs 也会出错,但这是代码写错了, 不算 exception , 要看日志, 但绝大多数都是可以忽略的.
      

  9.   

    如果你用Tomcat做服务器的话,给你个建议就是自己测试的时候换成JBOSS。
    同样也可以配置连接池,名字都不变,完全不用改源代码。然后用它做服务器,它有个好处就是可以观察你的WEB应用中的连接池中的连接数,最大多少个,已创建多少个,目前可以多少个,正在使用的个数。
    如果你的连接没有释放,那么正在使用的个数就是表明你的程序中目前有多少个连接没有释放。这样一来,可以找到问题的原因,如果不是这个再继续找其它的。