关于statement关闭的问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 07:00:07
我在用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;
}

DataSource ds =(DataSource)context.lookup("java:comp/env/struts/SQL");

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

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

没有你的Import 不知道DataSource是你找的JAR包 还是自己写的。 所以没办法帮你查API进一步证实

一般把statement或者connection的关闭写在finally{}语句块中。
因为你在try{}块中抛异常了程序直接跳到catch{}语句块中,当然不会执行你的rs.close();和rs2.close();的方法了。
而finally{}语句块不论抛不抛异常都执行,这样可以保证一定会关闭。
如try{
......
}catch{
......
}finally{
rs.close();
rs2.close();
}