连接池泄漏问题,高分求,在线等

gonxi1001 2005-09-15 02:51:24
错误提示:

<2005-9-15 下午14时36分02秒 CST> <Warning> <JDBC> <BEA-001074> <A JDBC pool connection leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the arbage collector and returned to the connection pool.
The following stack trace at create shows where the leaked connection was created. [Null exception
passed, creating stack trace for offending caller]
at weblogic.utils.StackTraceUtils.throwable2StackTrace(StackTraceUtils.java:28)
at weblogic.jdbc.wrapper.PoolConnection.finalize(PoolConnection.java:77)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)
>
...全文
338 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ywb1973 2005-09-16
  • 打赏
  • 举报
回复
把close放在该类的finalize()函数中试试,理论上该函数会在垃圾回收器回收连接池前执行。
didu811 2005-09-15
  • 打赏
  • 举报
回复
第一步:
在try外面
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
第二步:
在finally中关闭连接
finally {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
throw new Exception("数据库关闭时出错 !!! "+e.getMessage());
}
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
throw new Exception("数据库关闭时出错 !!! "+e.getMessage()); }
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
throw new Exception("数据库关闭时出错 !!! "+e.getMessage()); }
}
dachun 2005-09-15
  • 打赏
  • 举报
回复
当然得在取完数据后才到finally
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
如果rs关闭了就取不到数据了
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
To: flyxxxxx(灭神)
我类似于getComplexPage的函数有好几个,不可能在同一个函数开始的时候打开连接又在该函数的结尾关闭连接呀。
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
没什么变化,还是提示连接池泄漏
flyxxxxx 2005-09-15
  • 打赏
  • 举报
回复
Connection conn=null;
try{
conn=...;
}catch(Exception e){}//这里的catch如果不需要可以没有
finally{
if(conn!=null){
try{
conn.close();
}catch(Exception){}
}
}
dachun 2005-09-15
  • 打赏
  • 举报
回复
rs.close();
stm1.close();
conn.close();

应该写在finally中
dachun 2005-09-15
  • 打赏
  • 举报
回复
在try外面
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
需要放在catch中才行,而且放在finally中如何初始化?
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
to dachun(达达):
怎么放在finally中?
dachun 2005-09-15
  • 打赏
  • 举报
回复
rs.close();
stm1.close();

应该写在finally中
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
问题:
1、如果不用static的方法该如何写?
2、endup()中已经有关闭连接的操作,但跟踪发现,在关闭连接前系统已经报错了。
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
调用的jsp:
<%
DispNew.init();
try{
%>
...
<%
</font><font color="#333333"><font color="#333333"><font color="#333333"><font color="#333333">
<%
if(sPage.equals("5")){
String vt=DispNew.getComplexPage(5,10,pages,30,"index.jsp","images/p1/dot1.gif");
out.print(vt.trim());}
else{
String vt=DispNew.getComplexPage(5,10,"1and5",30,"index.jsp","images/p1/dot1.gif");
out.print(vt.trim());
}
%>
%>
...
<%
DispNew.endup();
}
catch(Exception e)
{
e.printStackTrace();
out.println("Error occur, please contact with administrator!");
}
%>
gonxi1001 2005-09-15
  • 打赏
  • 举报
回复
源码:

public static void init(){
try{
ctx = new InitialContext();
ds = (javax.sql.DataSource)ctx.lookup("WebDB");
cn = ds.getConnection();
}
catch(Exception e){
e.printStackTrace();
}
}

public static void endup(){
try{
if(rt!=null) rt.close();
if(stm!=null) stm.close();
if(cn!=null) cn.close();
}
catch(Exception e){
e.printStackTrace();
}
}

private static void pageinationQuery(int PageSize,int PageNo,int id){
String sql=new String();

try{
stm = cn.createStatement();
if(id!=0){
sql="select top "+PageSize*PageNo+" * from entry where title_id="+id+" order by entry_id desc";
}
else{
sql="select top "+PageSize*PageNo+" * from entry order by entry_id desc";
}
rt = stm.executeQuery(sql);
for(int i=PageSize;i<(PageSize*PageNo);i++){
rt.next();
}
}
catch(Exception e){
System.out.print("\n\n\n"+sql+"\n\n\n");
e.printStackTrace();
}
}

private static void getCount(int id,int pageSize){
ResultSet rs;
try{
Statement stm1 = cn.createStatement();
String sql;
if(id!=0){
sql="select count(*) from entry where title_id="+id;
}
else{
sql="select count(*) from entry";
}
rs = stm1.executeQuery(sql);
rs.next();
cnt=(rs.getInt(1)%pageSize==0)?(rs.getInt(1)/pageSize):(rs.getInt(1)/pageSize+1);
rs.close();
stm1.close();
}
catch(Exception e){
e.printStackTrace();
}
}

public static String getComplexPage(int tab,int pageSize,String strPageNo,int iDispWidth,String jspFile,String imgFile){
String strDisp,strHint,strTmp,strDate;
int pageNo=Integer.parseInt(strPageNo.substring(0,strPageNo.indexOf("and")));
String sPageNo=strPageNo.substring(strPageNo.indexOf("and")+3,strPageNo.length());
pageinationQuery(pageSize,pageNo,tab);
strDisp="<table border='0' cellspacing='0' cellpadding='0'>";
getCount(tab,pageSize);
try{
while(rt.next()){
strHint=rt.getString("content").trim();
if(strHint.length()>(iDispWidth+3)){
strTmp=strHint.substring(0,iDispWidth);
strTmp=strTmp+"...";
}
else{
strTmp=strHint;
}
strDate=rt.getString("iss_date").substring(5,10);
strDisp=strDisp+"<tr class='Color2'><td width='30'> <div align='center'><img src="+imgFile+" width='8' height='8'></div></td>";
strDisp=strDisp+"<td width='487' height='20' bordercolor='#FFFFFF'><font size='2' color='#666666'><A href=\""+rt.getString("doc_path").trim()+"\" target=\"_blank\">";
strDisp=strDisp+strTmp+"("+strDate+")";
strDisp=strDisp+"</A></font>";
if(strDate.equals(strToday)){
strDisp=strDisp+"<img src ='images/p2/new.gif'></td></tr>";
}
else{
strDisp=strDisp+"</td></tr>";
}
}
int totalPages=cnt;
if(pageNo==1 && pageNo <totalPages){
strDisp=strDisp+"<tr><td></td><td><font size='2' color='#666666'>第"+Integer.toString(pageNo)+"页,共"+Integer.toString(totalPages)+"页 首页 上一页 </font><A href=\""+jspFile+"?page="+Integer.toString(pageNo+1)+"and"+sPageNo+"\">下一页</A>";
strDisp=strDisp+" <A href=\""+jspFile+"?page="+Integer.toString(totalPages)+"and"+sPageNo+"\">尾页</A></td></tr>";
}
else if(pageNo==totalPages && pageNo!=1){
strDisp=strDisp+"<tr><td></td><td><font size='2' color='#666666'>第"+Integer.toString(pageNo)+"页,共"+Integer.toString(totalPages)+"页 </font><A href=\""+jspFile+"?page=1"+"and"+sPageNo+"\">首页</A>";
strDisp=strDisp+" <A href=\""+jspFile+"?page="+Integer.toString(pageNo-1)+"and"+sPageNo+"\">上一页</A><font size='2' color='#666666'> 下一页 尾页</font></td></tr>";
}
else if(pageNo>1 && pageNo<totalPages){
strDisp=strDisp+"<tr><td></td><td><font size='2' color='#666666'>第"+Integer.toString(pageNo)+"页,共"+Integer.toString(totalPages)+"页 </font><A href=\""+jspFile+"?page=1"+"and"+sPageNo+"\">首页</A>";
strDisp=strDisp+" <A href=\""+jspFile+"?page="+Integer.toString(pageNo-1)+"and"+sPageNo+"\">上一页</A>";
strDisp=strDisp+" <A href=\""+jspFile+"?page="+Integer.toString(pageNo+1)+"and"+sPageNo+"\">下一页</A>";
strDisp=strDisp+" <A href=\""+jspFile+"?page="+Integer.toString(totalPages)+"and"+sPageNo+"\">尾页</A></td></tr>";
}
else{
strDisp=strDisp+"<tr><td></td><td><font size='2' color='#666666'>第"+Integer.toString(pageNo)+"页,共"+Integer.toString(totalPages)+"页 首页 上一页 下一页 尾页</font></td></tr>";
}
}
catch(Exception e){
e.printStackTrace();
}
strDisp=strDisp+"</table>";
return strDisp;
}
内容概要:本文介绍了医药管理系统的开发与实现,旨在利用计算机技术提升医药信息管理的效率和可靠性。该系统采用Java语言编写,基于Spring Boot框架,并使用MySQL数据库进行数据管理。系统主要功能涵盖供应商类型管理、供应商信用等级管理、药品类型管理、供应商管理、药品管理、进货管理和销售管理等。文中详细描述了系统的开发背景、意义、技术选择、系统分析、设计原则、功能模块设计、数据库设计、功能实现及系统测试等内容。此外,还对系统的安全性、易用性和健壮性进行了深入分析,确保系统在实际应用中稳定可靠。 适合人群:医药行业从业者,特别是从事医药信息管理的工作人员;具有一定编程基础的研发人员,尤其是对Java和Spring Boot框架有一定了解的开发者。 使用场景及目标:① 提升医药信息管理的效率和准确性,减少人工操作带来的误差;② 实现药品、供应商、进货、销售等信息的系统化管理;③ 通过合理的界面设计和操作流程,确保用户能够快速上手并高效使用系统;④ 提供数据的安全保障,防止信息泄露和丢失。 其他说明:系统开发过程中,虽然实现了预期功能,但仍存在一些不足之处,如数据冗余和代码注释不足等问题。未来将进一步优化数据库设计,引入数据库连接池技术,精简代码结构,提高系统的性能和可维护性。同时,感谢导师、同学和家人的支持与帮助,使得该项目得以顺利完成。
内容概要:本项目介绍了医药管理系统的开发与实现,旨在利用计算机技术提升医药信息管理的效率和可靠性。该系统采用Java语言编写,基于Spring Boot框架,并使用MySQL数据库进行数据管理。系统主要功能涵盖供应商类型管理、供应商信用等级管理、药品类型管理、供应商管理、药品管理、进货管理和销售管理等。文中详细描述了系统的开发背景、意义、技术选择、系统分析、设计原则、功能模块设计、数据库设计、功能实现及系统测试等内容。此外,还对系统的安全性、易用性和健壮性进行了深入分析,确保系统在实际应用中稳定可靠。 适合人群:医药行业从业者,特别是从事医药信息管理的工作人员;具有一定编程基础的研发人员,尤其是对Java和Spring Boot框架有一定了解的开发者。 使用场景及目标:① 提升医药信息管理的效率和准确性,减少人工操作带来的误差;② 实现药品、供应商、进货、销售等信息的系统化管理;③ 通过合理的界面设计和操作流程,确保用户能够快速上手并高效使用系统;④ 提供数据的安全保障,防止信息泄露和丢失。 其他说明:系统开发过程中,虽然实现了预期功能,但仍存在一些不足之处,如数据冗余和代码注释不足等问题。未来将进一步优化数据库设计,引入数据库连接池技术,精简代码结构,提高系统的性能和可维护性。同时,感谢导师、同学和家人的支持与帮助,使得该项目得以顺利完成。

67,543

社区成员

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

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