Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #37092

Re: Is this the way to work with try with resources

From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: Is this the way to work with try with resources
Date 2017-08-08 21:25 -0400
Organization Aioe.org NNTP Server
Message-ID <omdob4$cif$1@gioia.aioe.org> (permalink)
References <87poc6wb9n.fsf@munus.decebal.nl>

Show all headers | View raw


On 8/8/2017 7:26 AM, Cecil Westerhof wrote:
> When using with resources you ‘should’ always work with try with
> resources. At the moment I have something like the following code:
>      private static void statistics() {
>          try (Statement stmt = conn.createStatement()) {
>              String format;
> 
>              try (ResultSet rsTotal = stmt.executeQuery(COUNT_TOTAL_PROV)) {
>                  final int count = rsTotal.getInt("no");
> 
>                  format = String.format("There are %%,%dd %%6s proverbs.%%n", String.format("%,d", count).length());
>                  System.out.printf(format, count, "total");
>              }
>              try (ResultSet rsUnused = stmt.executeQuery(COUNT_UNUSED_PROV)) {
>                  final int count = rsUnused.getInt("no");
> 
>                  if (count != 0) {
>                      System.out.printf(format, count, "unused");
>                  }
>              }
>              try (ResultSet rsUsed = stmt.executeQuery(COUNT_USED_PROV)) {
>                  final int count = rsUsed.getInt("no");
> 
>                  System.out.printf(format, count, "used");
>              }
>          } catch (SQLException e) {
>              System.err.printf("Error in statistics\n");
>              e.printStackTrace();
>              fatalError("");
>          }
>      }
> 
> It feels a bit long-winded. Is this the way to go, or is there a
> better way?

That code looks like try with resource is intended to be used

> I thought that I could rewrite it to:
>      private static void statistics() {
>          try (Statement stmt     = conn.createStatement();
>               ResultSet rsTotal  = stmt.executeQuery(COUNT_TOTAL_PROV);
>               ResultSet rsUnused = stmt.executeQuery(COUNT_UNUSED_PROV);
>               ResultSet rsUsed   = stmt.executeQuery(COUNT_USED_PROV)) {

As already mentioned by somebody else then executing multiple queries
on the same connection and statement is not safe.

And even if you modified the code to work on different connections and
statements, then it would sort of violate good database programming
practice by opening more stuff and keeping stuff open longer than
needed.

It would also require all readers of your code to know that close
is called in reverse order for the code to look good in their eyes.

Bottom line: bad!

>              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("");
>          }
>      }
> 
> That would be a little better I think, but when there are a lot of
> queries to be done, you need to define a lot of extra result-sets.
> 
> But there is a problem with that. If I do that, all three result-sets
> have the same query: the last one.
> What is the reason for this? I am using SQLite3.

New SQL statement => result from previous SQL statement is
discarded.

Arne


Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-08 13:26 +0200
  Re: Is this the way to work with try with resources Martin Gregorie <martin@address-in-sig.invalid> - 2017-08-08 12:51 +0000
    Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 07:10 +0200
  Re: Is this the way to work with try with resources Patrick Roemer <sangamon@netcologne.de> - 2017-08-08 18:29 +0200
    Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 07:20 +0200
    Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 07:16 +0200
  Re: Is this the way to work with try with resources Patrick Roemer <sangamon@netcologne.de> - 2017-08-08 19:30 +0200
    Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 06:49 +0200
    Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 07:01 +0200
    Re: Is this the way to work with try with resources Patrick Roemer <sangamon@netcologne.de> - 2017-08-09 15:39 +0200
  Re: Is this the way to work with try with resources Arne Vajhøj <arne@vajhoej.dk> - 2017-08-08 21:25 -0400
    Re: Is this the way to work with try with resources Arne Vajhøj <arne@vajhoej.dk> - 2017-08-08 21:36 -0400
      Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 07:29 +0200
        Re: Is this the way to work with try with resources Arne Vajhøj <arne@vajhoej.dk> - 2017-08-09 20:53 -0400
          Re: Is this the way to work with try with resources Arne Vajhøj <arne@vajhoej.dk> - 2017-08-09 23:03 -0400
    Re: Is this the way to work with try with resources Arne Vajhøj <arne@vajhoej.dk> - 2017-08-08 21:48 -0400
    Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 07:24 +0200
  Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 06:26 +0200
    Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 08:30 +0200
    Re: Is this the way to work with try with resources Andreas Leitgeb <avl@logic.at> - 2017-08-09 09:40 +0000
      Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 12:56 +0200
        Re: Is this the way to work with try with resources Andreas Leitgeb <avl@logic.at> - 2017-08-09 16:51 +0000
          Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 19:37 +0200
            Re: Is this the way to work with try with resources Andreas Leitgeb <avl@logic.at> - 2017-08-09 19:51 +0000
              Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 22:20 +0200
                Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 23:17 +0200
          Re: Is this the way to work with try with resources Patrick Roemer <sangamon@netcologne.de> - 2017-08-09 22:08 +0200
        Re: Is this the way to work with try with resources Arne Vajhøj <arne@vajhoej.dk> - 2017-08-09 18:07 -0400
    Re: Is this the way to work with try with resources Arne Vajhøj <arne@vajhoej.dk> - 2017-08-09 18:05 -0400
  Re: Is this the way to work with try with resources Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 06:39 +0200

csiph-web