JDBC

rorom 2010-06-08 11:35:06


public class TConnection {
private static Connection conn;

public static Connection getConnection(){
// 加载驱动
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
// 创建连接
conn = DriverManager.getConnection("jdbc:mysql://192.168.1.3:3306/data","root","root");
}catch (Exception e) {
conn=null;
MessageDao md = new MessageDao();
//发送异常消息,通知前台
if(! md.dbExceptionMessageAgain())
md.sendMessage(null, 42);
md = null;
}
//返回连接
return conn;
}

public static void closeConnection(ResultSet rs,PreparedStatement pst,Connection conn) {
try {
if(rs!=null) rs.close();
if(pst!=null) pst.close();
if(conn!=null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
rs = null;
pst = null;
conn = null;
}
}

public static void closeConnection(Connection conn) {
try {
if(conn!=null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
conn = null;
}
}
}

//应用
public void ways1(){
Connection connT=null;
connT = TConnection.getConnection();
if(connT==null){
request.setAttribute("error", "服务器繁忙,请稍后再试.");
ConnFactory.close(connP);
return;
}
...
TConnection.close(connT);
}


现在请教一下大家,我连接的数据库最大连接数是200,为什么在服务器连接这里连续异常之后就再连不上了呢?
异常好像是连接已满.不过也不一定,日志全丢了.
这个连接用的比较频繁.不过也不会到并发100以上.
另外,这个已经无法再用连接池,因为程序已经连了2个,之前用了池,会出错误.
忘高手相助.
...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sosfnima 2010-06-08
  • 打赏
  • 举报
回复
//应用
public void ways1(){
Connection connT=null;
connT = TConnection.getConnection();
if(connT==null){
request.setAttribute("error", "服务器繁忙,请稍后再试.");
ConnFactory.close(connP);
return;
}
...
TConnection.close(connT);
}


这句ConnFactory.close(connP); 是何意思啊?
Java技术栈 2010-06-08
  • 打赏
  • 举报
回复
你好 这问题没什么端倪 帮顶先 期待高手 呵
lvzhu18 2010-06-08
  • 打赏
  • 举报
回复
没看出有什么问题,难道是你用完连接没释放?
2010-06-08
  • 打赏
  • 举报
回复
看代码看不出什么错误来。日志怎么丢了呢?
rorom 2010-06-08
  • 打赏
  • 举报
回复
还有没有高人帮我看看什么情况下会导致连接满?
或者有没有可能狂抛连接失败的异常导致jdk堆空间不足?
rorom 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cxr1217 的回复:]
public static void closeConnection(ResultSet rs,PreparedStatement pst,Connection conn) {
try {
if(rs!=null) rs.close();
if(pst!=null) pst.close();
if(conn!=null) conn.close();
} catch (……
[/Quote]

谢谢,这个是得这样改.
rorom 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sosfnima 的回复:]
//应用
public void ways1(){
Connection connT=null;
connT = TConnection.getConnection();
if(connT==null){
request.setAttribute("error", "服务器繁忙,请稍后再试.");
ConnFactory.close(connP);
r……
[/Quote]

不好意思ConnFactory.close(connP); 复制错了
应该是TConnection.closeConnection(conn);
蜗牛哼哼 2010-06-08
  • 打赏
  • 举报
回复
public static void closeConnection(ResultSet rs,PreparedStatement pst,Connection conn) {
try {
if(rs!=null) rs.close();
if(pst!=null) pst.close();
if(conn!=null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
rs = null;
pst = null;
conn = null;
}
}
还是finally里面关闭 connection 吧,确保 connection 真的被关闭了

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧