目前我们有一个java应用程序,它有很多不同的查询,并且并不是所有的查询都在特定的时间运行。因此,对于每个查询,我们计划有一个新的语句和结果集并立即关闭它们?下面给出了我们现在如何运行查询的代码片段。我们试图用try和catch来覆盖每个查询,但是如果查询失败,回滚在全局级别上不起作用。如何最好的让他们到位以确保没有内存泄漏呢?使用语句和结果集管理多个查询可选查询
try{ //main try outside
//lots of inner queries run based on some logics of if else etc
//sample query of opening and closing both statement and resultsets.
Statement stmt1 = null;
stmt1 = dbconn.createStatement();
String selectQuery1 = "Select query";
ResultSet rs1 = stmt1 .executeQuery(selectQuery1);
while(rs1.next()) {
//process here
}
try{
if (rs1 != null){
rs1.close();
}
if (stmt1!= null){
stmt1.close()
}
}
catch(SQLException ex){
ex.printStackTrace(System.out);
}
dbconn.commit();
}
catch (SQLException ex) {
try {
dbconn.rollback();
}
catch (Exception rollback){
rollback.printStackTrace(System.out);
}
}
catch (Exception e){
try{
dbconn.rollback();
}
catch (Exception rollback) {
rollback.printStackTrace(System.out);
}
}
“回滚不工作在全球范围内” - 也许自动提交设置为“开”? – alfasin 2012-08-17 18:14:05
你有没有看过Spring JDBC模板?它减少了所有这些SQLExceptions的混乱。 – 2012-08-17 18:15:08
在开始其他任何事情之前,自动提交在最上面设置为false。 – user837306 2012-08-18 07:13:51