try-with-resources and null resource (original) (raw)

Tom Hawtin tom.hawtin at oracle.com
Mon Jan 31 12:26:14 PST 2011


On 31/01/2011 19:51, Vimil Saju wrote:

The following code pattern is present at many places in our code base. List records = new ArrayList(); ResultSet rs = null; try { rs = executeQuery(st); records = fetchRecords(rs, returnClass); } catch(Exception ex) { logDBError(ex); throw new DBException(ErrorCodes.DBFETCHERROR, ex); } finally { freeUp(rs); } return records; How would the about code look like with the new try-with-resources syntax?

Looks like copy-and-paste messed up the formatting:

List<T> records = new ArrayList<T>();
ResultSet rs = null;
try {
    rs = executeQuery(st);
    records = fetchRecords(rs, returnClass);
} catch (Exception ex) {
    logDBError(ex);
    throw new DBException(ErrorCodes.DB_FETCH_ERROR, ex);
} finally {
    freeUp(rs);
}
return records;

I'm going to assume that executeQuery does not return null and that freeUp closes the ResultSet if non-null and wraps the SQLException as a DBException.

try {
    try (ResultSet rs = executeQuery(st)) {
        return fetchRecords(rs, returnClass);
    }
} catch (Exception ex) {
    logDBError(ex);
    throw new DBException(ErrorCodes.DB_FETCH_ERROR, ex);
}

(I've left catch Exception in, although usually such a broad catch would be considered a bad idea in most situations.)

The Execute Around idiom is still a good idea. A better idea when we have concise anonymous inner class syntax/lambdas. (Or an ORM!)

Tom



More information about the coin-dev mailing list