可能存在问题,
1。对于同一个DBA对象,如果多次调用open方法,就会导致已有的数据库连接句柄丢失,导致用close方法只能关闭最后一个连接,
2.对于如何察看有没有存在没有关闭的连接,你可以建立一个全局变量,比如一个Hashtable,那么,每次得到一个连接的时候,都把这个连接放到Hashtable中,关闭的时候,把connection从Hashtable 中删除。如果需要察看有多少的连接没有关闭,只需要察看该Hashtable中有多少个element就可以了。

解决方案 »

  1.   

    能不能使用个tomcat 命令或函数什么的,显示出当前已经打开的连接数。?
      

  2.   

    一开始怀疑是数据库连接池的资源没有释放,但后来检查代码没有这种情况。
    现在还不明白是什么原因,哪位朋友遇到我相同的情况啊!
       根据我的经验来看,你的确是因为数据库连接池的资源没有释放!解决的办法=====》
    使用同步数据连接即可~!注意:关键字synchronized 
    public synchronized Connection pubGetCon() throws SQLException {
    try {
    Context jndiCntx = new InitialContext();
          DataSource ds =
                (DataSource)jndiCntx.lookup( "java:comp/env/jdbc/MyDB");
    return ds.getConnection();
    } catch (NamingException ne) {
    throw new EJBException(ne);
    }
    }
      

  3.   

    把connection单写一个程序,你的程序好象每次都开连接池啊?!
    一个连接池要提供多个connection
      

  4.   

    public static int getCount() {        ResultSet rs = null;
            Connection conn = null;
            String sql = "select count(*) num from loginuser";
            int count = 0;
            Statement stmt = null;
            try {
                conn = getConnection();
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                while (rs != null && rs.next()) {
                    count = rs.getInt("num");
                }        }
            catch (SQLException e) {
                System.err.println("excuteQuery err:" + e.getMessage());
            }        finally {
                try {
                    if (rs != null) {                    rs.close();
                        rs = null;
                    }
                    if (stmt != null) {                    stmt.close();
                        stmt = null;
                    }                if (conn != null) {                    conn.close();
                        conn = null;
                    }            }
                catch (Exception e) {
                    System.out.print("执行SQL出错!" + e.toString());
                }
            }
            return count;    }
      

  5.   

    public static synchronized Connection getConnection() throws SQLException {
    try {
    Context jndiCntx = new InitialContext();
          DataSource ds =
                (DataSource)jndiCntx.lookup( "java:comp/env/jdbc/MyDB");
    return ds.getConnection();
    } catch (NamingException ne) {
    throw new EJBException(ne);
    }
    }
      

  6.   

    我用的是Tomcat5.0.19,连接数据库也是总出问题,有时候正常,执行数据库操作一切OK,但有时竟然报错,,,,JDBC SQL DRIVER。。就是数据库驱动不对!
    我看了下Tomcat-----有这样的提示严重错误:catalina..stop!!!
    这是什么问题呀,我都装好几遍了。真感觉这些东西没MS的IIS好用。
      

  7.   

    同意 wyy_9715072(小宇) 所说的建议修改楼主的open() 方法,添加以下代码:  public void open() {    // 避免同一个dba实例的open方法的多次调用而造成数据库连接的丢失
        if(conn!=null){ // <===新添加
          return;       // <===新添加
        }               // <===新添加    try {
          //...
    如上处理以后将不用synchronized关键字实现同步处理
      

  8.   

    其实只要将open方法中的内容移至构造方法中就没有问题了.
      

  9.   

    老兄!不能用Weblogic或WebSphere吗?
    Tomcat有什么好呀!
    if("便宜".equals("好货")){
       System.out.println("那就用Tomcat吧!");
    }else{
       System.out.println("就用Weblogic或WebSphere吧!");
    }
    你选择那一个呀?
    我给你提一个建议吧!重装Tomcat在进行如下操作:
    Tomcat有些东西是无用并且影响你的程序运行,你把他都删除
    Tomcat目录下webapps的目录下
    balancer,jsp-examples,servlets-examples,webdav这四个都删除
    Tomcat5\conf\Catalina\localhost\balancer.xml也删除
    轻装上阵,最起码不会有Tomcat的垃圾信息和错误
      

  10.   

    我想你应该把tomcat在服务中给它设置成自动得,这样你就不能有上面得问题了!
      

  11.   

    什么自动的?自动是什么意思?你是说把tomcat设置成系统服务吗? 如果设置成服务的话tomcat如果死掉的话,它会自动重启tomcat吗?
      

  12.   

    现在使用什么版本? tomcat5好像不稳定吧!
      

  13.   

    什么自动的?自动是什么意思?你是说把tomcat设置成系统服务吗? 如果设置成服务的话tomcat如果死掉的话,它会自动重启tomcat吗?
    ==〉在服务里面可以设置,如果服务失败可以选在重起不过我认为这个是下下之策,你还是改进一下代码吧
      

  14.   

    没人知道吗????
    csdn叹!
      

  15.   

    我的网站用的是 JDBC 的数据源,感觉挺好的,只要写了 cn.close(),还没出现过有关数据库的问题。
    http://www.comicspot.net
    Apache 2.0.49 + Tomcat 5.0.19
    MySQL 4.0.18
    J2SDK 1.4.02
      

  16.   

    我想应该与你的连接数据库的代码无关,我遇到的这种情况多半是因为修改了一些系统配置的文件或者是属性,所以TOMCAT就不会启动。
      

  17.   

    我的问题不是tomcat不启动。是tomcat运行一段时间,一般是一个星期就不启动了。
      

  18.   

    不启动,是什么意思
    是说,tomcat自动关掉了,还是没有办法访问页面
    如果不能访问页面,那么,提示是什么错误
    不能访问jsp页面的时候,html的页面能不能访问到呢?
    如果html能够访问,那就能看到jsp的出错情报压
    如果html也不能访问到,你看一下,在http://localhost/manager/html下面看看,session的个数是多少,你的session定义的失效时间是多少,如果是定义为永远不失效的话,那就给他一个失效时间,同时,系统允许的session个数加多一点
    如果是tomcat自动关掉,嘻嘻,这个,就需要兄弟自己找了,各种原因就多了,呵呵
      

  19.   

    是tomcat没有关掉,但服务已经停止了,访问jsp或html都显示505错误。
      

  20.   

    我也遇到过同样的问题,以前是因为使用连接池没有及时关闭而导致连接占线,后来用了TOMCAT自己带的连接池就没有出现这样的问题了。