Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #38753
| 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 |
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 | Next — Previous in thread | Next in thread | Find similar
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