Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #37147
| From | Cecil Westerhof <Cecil@decebal.nl> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Not closing a SQL(ite3) connection |
| Date | 2017-08-12 16:26 +0200 |
| Organization | Decebal Computing |
| Message-ID | <877ey8zwtt.fsf@munus.decebal.nl> (permalink) |
| References | (1 earlier) <omg0la$1qe3$1@gioia.aioe.org> <874lte1pdj.fsf@munus.decebal.nl> <omli1h$jt7$1@gioia.aioe.org> <87k229z041.fsf@munus.decebal.nl> <omn168$mgs$1@gioia.aioe.org> |
Arne Vajhøj <arne@vajhoej.dk> writes:
> I got that this was test code.
>
> But it was not obvious to me exactly what was the test and what
> was context.
OK, next time I should be more clear,
>> That was the problem. When using:
>> resultSet.getInt("Count");
>> instead of:
>> resultSet.next();
>>
>> I get the error I expected.
>
> Calling a getXxxx before next should give an error even if
> statement was not closed.
That is what you would expect, but with SQLite it is not necessary.
But it would better to do it anyway. Even if it is throwaway code.
>> The real method is now:
>> @Override
>> public void close() throws SQLite3Exception {
>> boolean closedResultSet = false;
>>
>> try {
>> Statement stmt = resultSet.getStatement();
>>
>> resultSet.close();
>
> There mys be missing an assignment here.
The resultSet is assigned in the constructor of the class.
>
>> stmt.close();
>> } catch (SQLException e) {
>> if (closedResultSet) {
>> throw new SQLite3Exception("Could not close Statement after closing ResultSet.");
>> }
>> throw new SQLite3Exception("Could not close ResultSet.");
>
> I don't like this conditional here.
>
> Either separate catch or just let the SQLException propagate information
> about what the problem was.
I want it to be clear when the closing of the resultSet went OK, but
the closing of stmt not. I was thinking about doing it in two tries,
but did not do it. And I should do three tries, because the fetching
of stmt can also go wrong. So now I have:
@Override
public void close() throws SQLException {
Statement stmt;
try {
stmt = resultSet.getStatement();
} catch (SQLException e) {
SQLException extException = new SQLException("Could not get Statement from ResultSet.");
extException.addSuppressed(e);
e = extException;
throw e;
}
resultSet.close();
try {
stmt.close();
} catch (SQLException e) {
SQLException extException = new SQLException("Could not close Statement after closing ResultSet.");
extException.addSuppressed(e);
e = extException;
throw e;
}
}
>> The reason that I wrote this code was that I do not want to have to
>> put a Statement and a ResultSet into my try with resources.
>
> I think it is common to use one try for Statement and one
> for ResultSet.
I know, but I do not like that. And it also does not hurt to just
write something for the fun of it. :-D
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-09 11:28 +0200
Re: Not closing a SQL(ite3) connection Arne Vajhøj <arne@vajhoej.dk> - 2017-08-09 18:00 -0400
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-11 10:26 +0200
Re: Not closing a SQL(ite3) connection Arne Vajhøj <arne@vajhoej.dk> - 2017-08-11 20:27 -0400
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-12 10:00 +0200
Re: Not closing a SQL(ite3) connection Andreas Leitgeb <avl@logic.at> - 2017-08-12 08:51 +0000
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-12 11:05 +0200
Re: Not closing a SQL(ite3) connection Arne Vajhøj <arne@vajhoej.dk> - 2017-08-12 09:52 -0400
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-12 16:26 +0200
Re: Not closing a SQL(ite3) connection Arne Vajhøj <arne@vajhoej.dk> - 2017-08-12 21:43 -0400
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-15 08:19 +0200
Re: Not closing a SQL(ite3) connection lewbloch@gmail.com - 2017-08-12 10:14 -0700
Re: Not closing a SQL(ite3) connection Andreas Leitgeb <avl@logic.at> - 2017-08-12 09:33 +0000
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-12 12:57 +0200
Re: Not closing a SQL(ite3) connection Andreas Leitgeb <avl@logic.at> - 2017-08-12 13:27 +0000
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-12 16:37 +0200
Re: Not closing a SQL(ite3) connection Arne Vajhøj <arne@vajhoej.dk> - 2017-08-12 09:55 -0400
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-12 16:44 +0200
Re: Not closing a SQL(ite3) connection Arne Vajhøj <arne@vajhoej.dk> - 2017-08-12 21:45 -0400
Re: Not closing a SQL(ite3) connection Martin Gregorie <martin@address-in-sig.invalid> - 2017-08-12 21:04 +0000
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-13 00:30 +0200
Re: Not closing a SQL(ite3) connection Martin Gregorie <martin@address-in-sig.invalid> - 2017-08-13 11:34 +0000
Re: Not closing a SQL(ite3) connection Cecil Westerhof <Cecil@decebal.nl> - 2017-08-13 15:27 +0200
Re: Not closing a SQL(ite3) connection Andreas Leitgeb <avl@logic.at> - 2017-08-12 13:06 +0000
csiph-web