Path: csiph.com!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Cecil Westerhof Newsgroups: comp.lang.java.programmer Subject: Re: Is this the way to work with try with resources Date: Wed, 09 Aug 2017 08:30:51 +0200 Organization: Decebal Computing Lines: 76 Message-ID: <87efsluuas.fsf@munus.decebal.nl> References: <87poc6wb9n.fsf@munus.decebal.nl> <87lgmtwels.fsf@munus.decebal.nl> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: mx02.eternal-september.org; posting-host="75662a87a83d79e99d1b79ff65a19ab5"; logging-data="27030"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX187fmOtX7rz62QhVUz2ryQO9wmCfy1X0V4=" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) X-Homepage: http://www.decebal.nl/ Cancel-Lock: sha1:YARQN4HCeXeVXv/REplqHXaiWr4= sha1:9K/eIrJT/nOvs26f64AZSNiPxWI= Xref: csiph.com comp.lang.java.programmer:37105 Cecil Westerhof writes: > The solution is to have a statement pro result-set, but than this > statement is only necessary for getting the result-set. So I rewrote > statistics to: > private static void statistics() { > try (ResultSet rsTotal = executeQuery(COUNT_TOTAL_PROV); > ResultSet rsUnused = executeQuery(COUNT_UNUSED_PROV); > ResultSet rsUsed = executeQuery(COUNT_USED_PROV)) { > int count; > String format; > > count = rsTotal.getInt("no"); > format = String.format("There are %%,%dd %%-6s proverbs.%%n", > String.format("%,d", count).length()); > System.out.printf(format, count, "total"); > count = rsUnused.getInt("no"); > if (count != 0) { > System.out.printf(format, count, "unused"); > } > count = rsUsed.getInt("no"); > System.out.printf(format, count, "used"); > } catch (SQLException e) { > System.err.printf("Error in statistics\n"); > e.printStackTrace(); > fatalError(""); > } > } > > And wrote the function executeQuery to make the code a little more > compact: > private static ResultSet executeQuery(String query) throws SQLException { > return conn.createStatement().executeQuery(query); > } This is a very simple case: I only retrieve a count. So I rewrote it to: private static void statistics() { try { int count; String format; count = getCount(COUNT_TOTAL_PROV); format = String.format("There are %%,%dd %%-6s proverbs.%%n", String.format("%,d", count).length()); System.out.printf(format, count, "total"); count = getCount(COUNT_UNUSED_PROV); if (count != 0) { System.out.printf(format, count, "unused"); } count = getCount(COUNT_USED_PROV); System.out.printf(format, count, "used"); } catch (SQLException e) { System.err.printf("Error in statistics%n"); e.printStackTrace(); fatalError(""); } } And I defined a function getCount: private static int getCount(String query) throws SQLException { int count; try (ResultSet rsCount = executeQuery(query)) { count = rsCount.getInt("count"); } return count; } So in this case there are not multiple ResultSet and implicit Statement. -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof