quietfarmer
2015-10-17 09:05
采纳率: 66.7%
浏览 2.4k

mysql的JDBC封装类如何释放资源?

在这个类中返回出一个Resultset结果,然后在另一个类中循环出来,有什么办法可以在这个类中直接释放资源?如果直接在后面加finally{...}会报错,初学求解

public ResultSet SQL_ExecuteQuery(String sql,Object [] p)
{
Connection con=openConnection();//打开数据库
PreparedStatement pst=null;//定义一个 执行对象
ResultSet rst=null;
try {
pst=con.prepareStatement(sql);//初始化执行对象
//循环设置参数
if(p!=null && p.length>0)
{
for (int i = 0; i < p.length; i++) {
pst.setObject((i+1), p[i]);//设置参数
}
}
rst=pst.executeQuery();
//最后执行命令 并返回结果
return rst;//执行命令
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

            return null;
        }
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 毕小宝 2015-10-17 09:12
    已采纳

    每个资源类都有提供close方法,需要在finally中调用close()方法,保证JdbC连接使用完成后资源一定会被释放。
    上述代码添加关闭代码,参考:

     public ResultSet SQL_ExecuteQuery(String sql,Object [] p)
    {
    Connection con=openConnection();//打开数据库
    PreparedStatement pst=null;//定义一个 执行对象 
    ResultSet rst=null;
    try {
    pst=con.prepareStatement(sql);//初始化执行对象
    //循环设置参数
    if(p!=null && p.length>0)
    {
    for (int i = 0; i < p.length; i++) {
    pst.setObject((i+1), p[i]);//设置参数
    }
    }
    rst=pst.executeQuery();
    //最后执行命令 并返回结果
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
       pst.close();
       con.close();
    }
               return rst;//执行命令 
            }
    
    打赏 评论

相关推荐 更多相似问题