------------------------------------------------------
在页面的最上方有这么一句:
<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也只有一个,而且不为空,那么根本就不可能产生别的连接啊
问题是:
这么多连接肯定是从操作数据库中产生出的,那么怎么产生了这么多连接,我只想要产生一个连接,怎么解决?
然后我用ps -ef查看系统进程时(linux)
发现操作一次数据库,就多一个oracle进程,如果像您说的,只产生一个dba对象的话,按照上面给出的代码,conn也只有一个,而且不为空,那么根本就不可能产生别的连接啊
问题是:
这么多连接肯定是从操作数据库中产生出的,那么怎么产生了这么多连接,我只想要产生一个连接,怎么解决?
#6
up
#7
已经回复过了
#8
up
#9
友情up!!!~~~~~~~~
#10
友情up
#11
老兄,你的Close() 方法没有机会调用. 你的Connection一直申请, 不把资源耗
完就怪啦.
在适当的地方调用你Close()吧.
完就怪啦.
在适当的地方调用你Close()吧.
#12
up
#13
你没有关闭connection,上面的兄弟说的对,在最后调用你的Close()
#14
那我的connection在什么时候申请了?我怎么没有发现呢?
#15
因为ExeQuery和ExeUpdate方法里都对conn进行了判断,如果为空才创建另一个连接,怎么会出现连接不断增加的问题呢?
#16
那是因为你的每一个jsp页面都对Config对象进行了创建,所以conn也跟着被创建了,那么每一个页面就会有一个空的conn对象,就会增加一个数据库的连接,而且你又不去释放它,那么连接一直就会增加下去,一直到最大连接数.
解决连接数问题,有一个笨办法和一个好办法:
笨办法对于少量用户的访问还是可以的,那就是用完一个连接关闭一个连接,再用再开,比如查询一次连接一次关闭一次,这样的话,当查询完了之后,数据库的连接就会是0,但是,当很多用户碰巧同时查询的时候,那么连接数就会上升
好方法就是大家常说的连接池,这样才能从根本上去控制连接数,好好学习吧.
:)
解决连接数问题,有一个笨办法和一个好办法:
笨办法对于少量用户的访问还是可以的,那就是用完一个连接关闭一个连接,再用再开,比如查询一次连接一次关闭一次,这样的话,当查询完了之后,数据库的连接就会是0,但是,当很多用户碰巧同时查询的时候,那么连接数就会上升
好方法就是大家常说的连接池,这样才能从根本上去控制连接数,好好学习吧.
:)
#1
顶!
#2
我的帖子怎么看不到???
#3
顶啊
#4
up
#5
我现在是这样的情况,就我一个人在某一个页面上操作时,也会发生数据库连接超限的问题,我操作的页面上有几个对数据库的操作,比如查询和插入,删除
然后我用ps -ef查看系统进程时(linux)
发现操作一次数据库,就多一个oracle进程,如果像您说的,只产生一个dba对象的话,按照上面给出的代码,conn也只有一个,而且不为空,那么根本就不可能产生别的连接啊
问题是:
这么多连接肯定是从操作数据库中产生出的,那么怎么产生了这么多连接,我只想要产生一个连接,怎么解决?
然后我用ps -ef查看系统进程时(linux)
发现操作一次数据库,就多一个oracle进程,如果像您说的,只产生一个dba对象的话,按照上面给出的代码,conn也只有一个,而且不为空,那么根本就不可能产生别的连接啊
问题是:
这么多连接肯定是从操作数据库中产生出的,那么怎么产生了这么多连接,我只想要产生一个连接,怎么解决?
#6
up
#7
已经回复过了
#8
up
#9
友情up!!!~~~~~~~~
#10
友情up
#11
老兄,你的Close() 方法没有机会调用. 你的Connection一直申请, 不把资源耗
完就怪啦.
在适当的地方调用你Close()吧.
完就怪啦.
在适当的地方调用你Close()吧.
#12
up
#13
你没有关闭connection,上面的兄弟说的对,在最后调用你的Close()
#14
那我的connection在什么时候申请了?我怎么没有发现呢?
#15
因为ExeQuery和ExeUpdate方法里都对conn进行了判断,如果为空才创建另一个连接,怎么会出现连接不断增加的问题呢?
#16
那是因为你的每一个jsp页面都对Config对象进行了创建,所以conn也跟着被创建了,那么每一个页面就会有一个空的conn对象,就会增加一个数据库的连接,而且你又不去释放它,那么连接一直就会增加下去,一直到最大连接数.
解决连接数问题,有一个笨办法和一个好办法:
笨办法对于少量用户的访问还是可以的,那就是用完一个连接关闭一个连接,再用再开,比如查询一次连接一次关闭一次,这样的话,当查询完了之后,数据库的连接就会是0,但是,当很多用户碰巧同时查询的时候,那么连接数就会上升
好方法就是大家常说的连接池,这样才能从根本上去控制连接数,好好学习吧.
:)
解决连接数问题,有一个笨办法和一个好办法:
笨办法对于少量用户的访问还是可以的,那就是用完一个连接关闭一个连接,再用再开,比如查询一次连接一次关闭一次,这样的话,当查询完了之后,数据库的连接就会是0,但是,当很多用户碰巧同时查询的时候,那么连接数就会上升
好方法就是大家常说的连接池,这样才能从根本上去控制连接数,好好学习吧.
:)