███急死人求救,分不够再加!!!JSP和Oracle连接数问题,各位高手进来帮帮忙啊!!!!!███帮顶也有分啊

时间:2021-08-19 21:30:08
我的JSP页面上和数据库有关的代码如下:
------------------------------------------------------
在页面的最上方有这么一句:
<jsp:useBean id="mydba" scope="request" class="d.DBconn" />
页面中就是select,update,delete,insert等的语句的操作了
------------------------------------------------------


对数据库操作的时候,出现maximum process的错误------------数据库连接数达到上限,我估计是我下面的数据库程序有问题,但是我又不知道怎么去改,麻烦高手帮我看一看.

下面是连接数据库方面的程序
------------------------------------------------------------
package d;

import java.sql.*;
import oracle.jdbc.driver.OracleDriver;

class DBconn {
  private Connection conn;
  private Statement stmt;
  private ResultSet rs;

  protected String DBdriver;
  protected String DBurl;
  protected String DBuser;
  protected String DBpwd;

  protected static String s_DBdriver = "oracle.jdbc.driver.OracleDriver";
  protected static String s_DBurl = "jdbc:oracle:thin:@localhost:1521:O817DB";
  protected static String s_DBuser = "LMY";
  protected static String s_DBpwd = "LMY";

  public static boolean s_configged = false;
  private static boolean con = false;

  public static boolean setglobaldbpara(String p_DBdriver,
                                        String p_DBurl, String p_DBuser,
                                        String p_DBpwd) {
    if (!s_configged) {
      s_configged = true;

      s_DBdriver = p_DBdriver;
      s_DBurl = p_DBurl;
      s_DBuser = p_DBuser;
      s_DBpwd = p_DBpwd;
      return true;
    }
    return false;
  }

  public DBconn() throws ClassNotFoundException, IllegalAccessException,
      InstantiationException, SQLException {
    conn = null;
    stmt = null;
    rs = null;

    DBdriver = s_DBdriver;
    DBurl = s_DBurl;
    DBuser = s_DBuser;
    DBpwd = s_DBpwd;

    try {
      Class.forName(DBdriver);
    }
    catch (ClassNotFoundException e) {
      System.err.println("DBconn (): " + e.getMessage());
    }
  }

  public ResultSet ExeQuery(String s) {
    try {
      if (conn == null) {
        conn = DriverManager.getConnection(DBurl,
                                           DBuser,
                                           DBpwd);
        rs = null;
        stmt = null;
      }
      if (conn == null) {
        rs = null;
        stmt = null;
        return null;
      }
      if (rs != null) {
        rs.close();
        rs = null;
      }
      if (stmt == null) {
        stmt = conn.createStatement();
      }
      return stmt.executeQuery(s);
    }
    catch (SQLException e) {
      System.err.println("executeQuery Exception:" + e.getMessage());
      rs = null;
      stmt = null;
      conn = null;
      return null;
    }
  }

  public int ExeUpdate(String s) {
    try {
      if (conn == null) {
        conn = DriverManager.getConnection(DBurl,
                                           DBuser,
                                           DBpwd);
        rs = null;
        stmt = null;
      }
      if (conn == null) {
        rs = null;
        stmt = null;
        return -1;
      }
      if (rs != null) {
        rs.close();
        rs = null;
      }
      if (stmt == null) {
        stmt = conn.createStatement();
      }
      return stmt.executeUpdate(s);
    }
    catch (SQLException e) {
      System.err.println("executeUpdate Exception:" + e.getMessage());
      rs = null;
      stmt = null;
      conn = null;
      return -1;
    }
  }

  public void Close() {
    try {
      if (rs != null)
        rs.close();
      if (stmt != null)
        stmt.close();
      if (conn != null)
        conn.close();
    }
    catch (Exception e) {
    }
    rs = null;
    stmt = null;
    conn = null;
  }
}
---------------------------------------------------------

救救我吧,昨天我搞了一天!!

16 个解决方案

#1


顶!

#2


我的帖子怎么看不到???

#3


顶啊

#4


up

#5


我现在是这样的情况,就我一个人在某一个页面上操作时,也会发生数据库连接超限的问题,我操作的页面上有几个对数据库的操作,比如查询和插入,删除

然后我用ps -ef查看系统进程时(linux)

发现操作一次数据库,就多一个oracle进程,如果像您说的,只产生一个dba对象的话,按照上面给出的代码,conn也只有一个,而且不为空,那么根本就不可能产生别的连接啊

问题是:

这么多连接肯定是从操作数据库中产生出的,那么怎么产生了这么多连接,我只想要产生一个连接,怎么解决?

#6


up

#7


已经回复过了

#8


up

#9


友情up!!!~~~~~~~~

#10


友情up

#11


老兄,你的Close() 方法没有机会调用. 你的Connection一直申请, 不把资源耗
完就怪啦.
在适当的地方调用你Close()吧.

#12


up

#13


你没有关闭connection,上面的兄弟说的对,在最后调用你的Close()

#14


那我的connection在什么时候申请了?我怎么没有发现呢?

#15


因为ExeQuery和ExeUpdate方法里都对conn进行了判断,如果为空才创建另一个连接,怎么会出现连接不断增加的问题呢?

#16


那是因为你的每一个jsp页面都对Config对象进行了创建,所以conn也跟着被创建了,那么每一个页面就会有一个空的conn对象,就会增加一个数据库的连接,而且你又不去释放它,那么连接一直就会增加下去,一直到最大连接数.

解决连接数问题,有一个笨办法和一个好办法:

笨办法对于少量用户的访问还是可以的,那就是用完一个连接关闭一个连接,再用再开,比如查询一次连接一次关闭一次,这样的话,当查询完了之后,数据库的连接就会是0,但是,当很多用户碰巧同时查询的时候,那么连接数就会上升

好方法就是大家常说的连接池,这样才能从根本上去控制连接数,好好学习吧.

:)

#1


顶!

#2


我的帖子怎么看不到???

#3


顶啊

#4


up

#5


我现在是这样的情况,就我一个人在某一个页面上操作时,也会发生数据库连接超限的问题,我操作的页面上有几个对数据库的操作,比如查询和插入,删除

然后我用ps -ef查看系统进程时(linux)

发现操作一次数据库,就多一个oracle进程,如果像您说的,只产生一个dba对象的话,按照上面给出的代码,conn也只有一个,而且不为空,那么根本就不可能产生别的连接啊

问题是:

这么多连接肯定是从操作数据库中产生出的,那么怎么产生了这么多连接,我只想要产生一个连接,怎么解决?

#6


up

#7


已经回复过了

#8


up

#9


友情up!!!~~~~~~~~

#10


友情up

#11


老兄,你的Close() 方法没有机会调用. 你的Connection一直申请, 不把资源耗
完就怪啦.
在适当的地方调用你Close()吧.

#12


up

#13


你没有关闭connection,上面的兄弟说的对,在最后调用你的Close()

#14


那我的connection在什么时候申请了?我怎么没有发现呢?

#15


因为ExeQuery和ExeUpdate方法里都对conn进行了判断,如果为空才创建另一个连接,怎么会出现连接不断增加的问题呢?

#16


那是因为你的每一个jsp页面都对Config对象进行了创建,所以conn也跟着被创建了,那么每一个页面就会有一个空的conn对象,就会增加一个数据库的连接,而且你又不去释放它,那么连接一直就会增加下去,一直到最大连接数.

解决连接数问题,有一个笨办法和一个好办法:

笨办法对于少量用户的访问还是可以的,那就是用完一个连接关闭一个连接,再用再开,比如查询一次连接一次关闭一次,这样的话,当查询完了之后,数据库的连接就会是0,但是,当很多用户碰巧同时查询的时候,那么连接数就会上升

好方法就是大家常说的连接池,这样才能从根本上去控制连接数,好好学习吧.

:)