quietfarmer 2015-10-17 09:05 采纳率: 66.7%
浏览 2399
已采纳

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;//执行命令 
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿