This week's book giveaway is in the Cloud forum.
We're giving away four copies of Terraform in Action and have Scott Winkler on-line!
See this thread for details.
Win a copy of Terraform in Action this week in the Cloud forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Tim Cooke
  • Campbell Ritchie
  • Paul Clapham
  • Ron McLeod
  • Liutauras Vilda
Sheriffs:
  • Jeanne Boyarsky
  • Rob Spoor
  • Bear Bibeault
Saloon Keepers:
  • Jesse Silverman
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
Bartenders:
  • Piet Souris
  • Al Hobbs
  • salvin francis

idiom for finally closing resources

 
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I want to dependably close the data base resources used in my application, despite exceptions. I also want to do this with sensible, clean code. The finally block seems critical, as well as avoiding duplication. Below is my current thought on how to do this, but I am not sure if it is good practice. I would welcome any suggestions from more experienced programmers.
 
author & internet detective
Posts: 40801
829
Eclipse IDE VI Editor Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Michael,
Assigning it to null is unnecessary as the variables go out of scope immediately after anyway. Other than that, you have the idiom down.

Two things people do to make this work even better:
1) Create a utility class that has a method like DbUtils.close(rs,stmt,conn). This lets the idiom exist in only one place.
2) Have the code in a superclass with an abstract method just to implement the executeQuery/loop through result set parts.
 
Rancher
Posts: 13459
Android Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Agreed, although:

1) the catch is not required and the try/finally is valid (and sometimes preferred) without it
2) The inner try/catch should catch SQLException, not 'Exception'
3) I like to log the inner exception in case it causes resource leaks, but I'm not too strict on this.
 
author
Posts: 4278
34
jQuery Eclipse IDE Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I went through a similar tirade not long ago in my blog. Generally, I prefer "if (null != rs) try { rs.close(); } catch (Exception e) {}" in the form of reusable static method.

Granted, you don't actually need to check if rs is null, although its good to. Changing the value to null in the finally is clever for garbage collection, but shouldn't be needed. 99.99% of the time, I create, use, and throw away ResultSets in a single method call so I can't see them ever hanging around such that they wouldn't be garbage collected.
[ December 16, 2008: Message edited by: Scott Selikoff ]
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic