当前页面: 开发资料首页 → J2EE 专题 → 这个jdbc的问题很奇怪啊?谁碰到过?怎么解决呢?
这个jdbc的问题很奇怪啊?谁碰到过?怎么解决呢?
摘要: 这个jdbc的问题很奇怪啊?谁碰到过?怎么解决呢?
我们开发了一个销售网站,使用的数据库是sql2000,采用的驱动是com.microsoft.jdbc.sqlserver.SQLServerDriver,自己做了链接池,每次调用的时候都通过
try{
db = new DbControl();
...........
} catch(Exception e) {
log.error("Error!(DbGame.java):",e);
} finally {
try {
db.close();
} catch(Exception e) {
log.error("Error!(关闭数据源出错了):",e);
}
}
调用close关闭了数据库,可是在使用的过程中发现,如果将数据库和web放在不同的网络内,会偶尔出现(好像是网络状况不太好的情况下),出现20-30个数据库链接,然后将所有的数据库连接都占用完,而其他连接就再也无法访问数据库,请问谁碰到过这样的问题呢?怎么样解决呢?
沙发
没碰到过
顶顶
这个没有办法的 由于网络引起的资源占用
你可以手动关闭那些连接
手动不行吧
可以设置sqlserver自动关闭连接的时间
设置的短一些吧?
学习
关注
在那里设置sqlserver自动关闭连接的时间呢?我用的是jboss4.0的服务器,这个问题好像很麻烦啊,但是异步式数据库应该也会碰到同样的问题啊。给个解决的思路阿?
就是一般死连接都出现在本机的网站链接,而外部连接反而没有
在finally中加
db.close()
db=null
关注
我已经在final中加入了close代码的啊
都来讨论一下这个问题啊
你的db类的close怎么写的?
很,没碰过
可能你的页面直接调用ResultSet结果集,结果集不关闭释放,连接是无法释放的.所以才会有个dao层把ResultSet结果集转化成PO对象List返回
楼上的兄弟,我支持你.
肯定是你的连接实现有问题.
自己写的连接池,挺厉害.
但是并没有经过严格的测试,
而且根据你的代码,肯定有并发问题.
把你的实现代码贴出来看看吧.
这里是close的代码
/**
* 使conn连接归还连接池,同时关闭stmt或pstmt。
*/
public void close() throws Exception {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
if (cstmt != null) {
cstmt.close();
cstmt = null;
}
if (conn != null) {
dbConnManager.freeConnection(conn);
}
}
而且我也没有直接用结果集返回,我定义了很多bean,然后每次取回的数据都用Map的方式记录下来再关闭数据库联接返回的。没有地方是直接返回记录集的。
不过这里我的rs都没有关闭,而是直接操作db.close()的。这样应该没有问题吧
=======
UP
这位朋友的可以参考:
xxdino(恐龙)
谁帮我看看 这个JAVABEAN 是什么问题 谢谢 急需要
package test;
import java.sql.*;
public class test
{
String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String sConnStr="jdbc:microsoft:sqlserver://localhost:8080;DatabaseName=bookshop";
String user = "sa";
String password = "123456";
Connection conn=null;
ResultSet rs=null;
public test()
{
try{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("错误是: personbean():"+e.getMessage());
}
}
//首页显示所有的记录,查询所有的数据;
public ResultSet executeQuery_FindAll()
{
String sql_FindAll="select id,title,name,body from body";
rs=null;
try
{
conn=DriverManager.getConnection(sConnStr,user,password);
Statement stmt=conn.createStatement();
rs=stmt.executeQuery(sql_FindAll);
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
}
}
:com.microsoft.jdbc.sqlserver.SQLServerDriver
No suitable driver
这两项都报了错
我怀疑可能是SQL SERVER的驱动没装好
但是在JSP里面又可以用
我晕,我就是lz啊,我现在就是碰到了解决不了的问题......帮我看看啊
别人有没有调用链接,调用后是否释放?
没有其他调用链接的地方。只有我自己的在用
在finally中加
你在调用连接的时候,就必须关闭,而不是db.close();因为你的bean返回的不是封装好的数据,而是封装的连接,直接调用关闭方法是不一定能关闭的,你的db.close();里面的实现代码,最好在每次使用连接的时候直接写在finally里面
这里我没有把数据连接传出来,而都是用array或者map把所有的数据存下来,再关闭连接,传回数据,所有的finally中都加上了close()的代码,还是有问题,而且这种问题很偶然
暈,沒有合適的sql驅動
关注
我也碰到过 不过我用的是MySQL 我们的做法时在Web配置里加释放连接的时间缩短一些,最大连接数设置的大一些. 嘿嘿
关注,
我发现好像只有把数据库和web放在一起才不会出现这样的问题啊,但是异地数据库连接是怎么没解决这个问题的呢?
我遇到过这样的问题,是连接数已经达到了最大数目,如果在DB2中可以设置最大的连接数是无限的,如果是SQL就要注意内存释放了,比如说无意中的一个statement,Resulet..等等!!这些东西如果不及时释放,将一直占用内存,或者导致内存泄漏...前几天一个同事些的代码就是没有Resulet释放,跑了一趟连云港哦
连接池不是用JNDI嘛??
up!
mark!
但是我们都及时释放了的啊
看了上边帖的code,哪里有什么conn pool啊?不就是单个连接申请吗?
什么意思?iihero(阿黑哥)
服务器对连接的设置有问题
比如超时设置什么的,去检查检查各项设置项就知道是哪个问题了
对了,一般超时设置多少时间为宜呢?
finally内的代码一般写的都是肯定不出错的. 不要再加 try catch
加上也应该没有错吧
在finally里加try catch ,finally的意义何在?!!