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


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

Re: it's Closeable, but I don't want to close() it yet.

Newsgroups comp.lang.java.programmer
Date 2019-02-28 11:12 -0800
References (5 earlier) <23a8128b-5c54-45ba-bfd0-2f7dda078517@googlegroups.com> <fdb81cf4-61e8-4b09-a62f-c97253f23550@googlegroups.com> <f71c1d05-cc27-4ecb-bea0-c32f03cd698e@googlegroups.com> <692da128-9302-41cf-a8f7-2a2a5903bf82@googlegroups.com> <3a4ed199-10a5-4ea3-882e-8d598a82dccf@googlegroups.com>
Message-ID <ab24ddfd-0235-4d43-8b9c-20cb8083df28@googlegroups.com> (permalink)
Subject Re: it's Closeable, but I don't want to close() it yet.
From bursejan@gmail.com

Show all headers | View raw


Yes in the old code you had:

                         while (rs.next()) {
                              r++;
                         }
                         rs.close();

And since rs.next() can throw an exception,
it could escape a closing.

But try-resource has the ability to close
as well, when the try-resource block

has an exception.

There were nice blog entries in the past
from Oracle John Rose, but cant find any
of them anymore. The Oracle blogs currently

look like shit, what did they do?

On Thursday, February 28, 2019 at 6:01:03 PM UTC+1, Eric Douglas wrote:
> On Thursday, February 28, 2019 at 11:34:22 AM UTC-5, burs...@gmail.com wrote:
> > See also:
> > 
> > Must JDBC Resultsets and Statements be closed 
> > separately although the Connection is closed afterwards?
> > https://stackoverflow.com/q/4507440/502187
> > 
> > The clean OO-solution, in case you dont need
> > the result set later, is to use  try-with-resources statement.
> > I dont recommend using result sets later, since
> > 
> > database systems usually have a dead man's handling.
> > There can be timeouts on all kind of layer levels.
> > Usually these tomeouts have a special error code,
> > 
> > and you should then do retry. It could be that your
> > connection pooling product does this already for you.
> > But it might not apply to result sets.
> > 
> > So somehow the eclipse warning makes sense.
> > 
> > On Thursday, February 28, 2019 at 5:24:29 PM UTC+1, burs...@gmail.com wrote:
> > > Actually you use try (resource), which does automatically
> > > always a close. Its internally implemented with try finally
> > > and does exceptiong piggy packing.
> > > 
> > > But JDBC says, if you close a statement, I guess result
> > > sets are also closed. And if you close a connection, statements
> > > are also closed. So what is this fuzz about?
> > > 
> > > What would be helpful, if the warning from the IDE would
> > > be shown as well. Could the OP please give the full test case,
> > > including its outcome?
> > > 
> > > On Thursday, February 28, 2019 at 3:52:24 PM UTC+1, Eric Douglas wrote:
> > > > On Thursday, February 28, 2019 at 9:19:24 AM UTC-5, Eric Douglas wrote:
> > > > > On Thursday, February 28, 2019 at 7:20:35 AM UTC-5, Andreas Leitgeb wrote:
> > > > > > The Closeable interface does not provide any concept of opening.
> > > > > > Eclipse just sees a local variable of a Closeable type that
> > > > > > goes out of scope without .close() being called on it.
> > > > 
> > > > Now, it is possible to confuse Eclipse.  I tried this method and got a warning.  Is there a better way to do this?
> > > > 
> > > >      public void testQuery(final String db_connect_string) {
> > > >           try (Connection conn = DriverManager.getConnection(db_connect_string)) {
> > > >                final String queryString = "select * from Log limit 10000 offset ?";
> > > >                try (PreparedStatement statement = conn.prepareStatement(queryString, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
> > > >                     int r = 0;
> > > >                     int r2 = -1;
> > > >                     statement.setInt(1, 0);
> > > >                     ResultSet rs = statement.executeQuery();
> > > >                     while (r != r2) {
> > > >                          r2 = r;
> > > >                          while (rs.next()) {
> > > >                               r++;
> > > >                          }
> > > >                          rs.close();
> > > >                          statement.setInt(1, r);
> > > >                          rs = statement.executeQuery();
> > > >                     }
> > > >                     rs.close();
> > > >                }
> > > >           } catch (SQLException e) {
> > > >                e.printStackTrace();
> > > >           }
> > > >      }
> 
> While my ugly loop to reuse the ResultSet variable should work properly, Eclipse didn't recognize that it closed properly.  That error message is "Potential resource leak: 'rs' may not be closed"
> 
> I'm guessing the clean way to paginate the table (my while loop uses POI to write the records to Excel, the r variable is actually the row number there) could look like this?
>      
>      public void testQuery(final String db_connect_string) {
>           final String queryString = "select * from Log limit 10000 offset ?";
>           try (Connection conn = DriverManager.getConnection(db_connect_string);PreparedStatement statement = conn.prepareStatement(queryString, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
>                int r = 0;
>                int r2 = -1;
>                while (r != r2) {
>                     r2 = r;
>                     statement.setInt(1, r);
>                     try (ResultSet rs = statement.executeQuery()) {
>                          while (rs.next()) {
>                               r++;
>                          }
>                     }
>                }
>           } catch (SQLException e) {
>                e.printStackTrace();
>           }
>      }

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


Thread

it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-02-27 15:51 +0000
  Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-27 08:48 -0800
    Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-02-27 19:03 +0000
      Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-27 11:09 -0800
        Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-02-28 12:20 +0000
          Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 06:19 -0800
            Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 06:52 -0800
              Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 08:24 -0800
                Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 08:34 -0800
                Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 09:00 -0800
                Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 11:12 -0800
                Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 11:26 -0800
                Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 11:33 -0800
                Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 11:37 -0800
                Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 11:41 -0800
                Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 11:48 -0800
                Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 12:51 -0800
                Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-03-01 08:47 +0000
                Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-03-01 09:31 +0000
                Re: it's Closeable, but I don't want to close() it yet. Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2019-03-03 02:01 +0100
                Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-03-04 09:38 +0000
                Re: it's Closeable, but I don't want to close() it yet. Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2019-03-04 12:26 +0100
                Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-03-05 14:34 +0000
                Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-03-05 07:34 -0800
                Re: it's Closeable, but I don't want to close() it yet. Arne Vajhøj <arne@vajhoej.dk> - 2019-03-04 13:59 -0500
  Re: it's Closeable, but I don't want to close() it yet. Marcel Mueller <news.5.maazl@spamgourmet.org> - 2019-02-28 08:30 +0100
    Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-02-28 19:10 +0000
      Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 11:34 -0800
      Re: it's Closeable, but I don't want to close() it yet. Marcel Mueller <news.5.maazl@spamgourmet.org> - 2019-02-28 22:24 +0100
        Re: it's Closeable, but I don't want to close() it yet. Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2019-02-28 23:25 +0100
          Re: it's Closeable, but I don't want to close() it yet. Andreas Leitgeb <avl@logic.at> - 2019-03-01 09:43 +0000
  Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 12:11 -0800
    Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 13:49 -0800
      Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 13:52 -0800
        Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 13:59 -0800
          Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-02-28 16:17 -0800
  Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 12:26 -0800
  Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-02-28 13:44 -0800
  Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-03-01 07:40 -0800
    Re: it's Closeable, but I don't want to close() it yet. bursejan@gmail.com - 2019-03-01 08:34 -0800
  Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-03-11 06:27 -0700
    Re: it's Closeable, but I don't want to close() it yet. Eric Douglas <e.d.programmer@gmail.com> - 2019-03-11 07:24 -0700

csiph-web