关于statement关闭的问题 30

我在用tomcat连接池连数据库查询时,发现statement不能被关闭,导致连接池最后没有可用连接,有什么好方法关闭statmenet对象吗?这里只贴出主要代码publ... 我在用tomcat连接池连数据库查询时,发现statement不能被关闭,导致连接池最后没有可用连接,有什么好方法关闭statmenet对象吗?

这里只贴出主要代码

public class Conndb {
private Connection conn=null;
private Context context=null;
private PreparedStatement prestmt=null;

private void open(){

try{
context =new InitialContext();
DataSource ds =(DataSource)context.lookup("java:comp/env/struts/SQL");
conn = ds.getConnection();
}catch (Exception e) {
e.printStackTrace();
}
}
public void close(){
try{

prestmt.close();
conn.close();
context.close();
}catch (Exception e) {
e.printStackTrace();
}
}

public ResultSet Sum(){
try{open();
prestmt=conn.prepareStatement("select count(*) from table1");
ResultSet rs=prestmt.executeQuery();
return rs;
}catch (SQLException e) {
e.printStackTrace();
}return null;
}

public ResultSet primeSum(){
try{
open();
prestmt=conn.prepareStatement("select count(*) from table2");
ResultSet rs=prestmt.executeQuery();
return rs;
}catch (SQLException e) {
e.printStackTrace();
}return null;
}

}
JSP页面

<% try{
Conndb conndb=new Conndb();
ResultSet rs=conndb.postSum();
while(rs.next()){
out.println("总数:"+rs.getInt(1)+"   ");
}

ResultSet rs2=conndb.primeSum();
int prime=0;
while(rs2.next()){
out.println(单个:"+rs2.getInt(1)+"   ");
}
rs.close();
rs2.close();
conndb.close();
}catch(Exception e){
e.printStackTrace();
}
%>

代码本身是没有书写错误的,请看标题回答,如果有好的答案,我没有多少分了还可以再加点。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

是不是statement没关闭造成的?谁遇到过帮帮忙,DataSource不是自己写的
展开
 我来答
Christ_earl
2009-11-06 · TA获得超过1245个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:0
展开全部
一般把statement或者connection的关闭写在finally{}语句块中。
因为你在try{}块中抛异常了程序直接跳到catch{}语句块中,当然不会执行你的rs.close();和rs2.close();的方法了。
而finally{}语句块不论抛不抛异常都执行,这样可以保证一定会关闭。
如try{
......
}catch{
......
}finally{
rs.close();
rs2.close();
}
lewanzi
2009-11-03 · TA获得超过1067个赞
知道小有建树答主
回答量:351
采纳率:61%
帮助的人:175万
展开全部
DataSource ds =(DataSource)context.lookup("java:comp/env/struts/SQL");

你看看是ds是否有关闭或清除的方法。 按理说这是拿了一个数据源

如果有
你应和其它的一样 ,在外边声明 Open中打开, Close里关闭。

没有你的Import 不知道DataSource是你找的JAR包 还是自己写的。 所以没办法帮你查API进一步证实
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式