Re: executeQuery() throws "Statement has been closed"

Поиск
Список
Период
Сортировка
От Dave Cramer
Тема Re: executeQuery() throws "Statement has been closed"
Дата
Msg-id CADK3HH+rp8jhcot_syE0MXD9Bh3_=m3cy9ZjsjSjsQGDO47U1A@mail.gmail.com
обсуждение исходный текст
Ответ на Re: executeQuery() throws "Statement has been closed"  (Hannes Erven <hannes@erven.at>)
Список pgsql-jdbc
While it may be possible to share connections across threads, I am pretty sure you cannot share Statements

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 1 August 2014 04:43, Hannes Erven <hannes@erven.at> wrote:
Hi,


> http://jdbc.postgresql.org/documentation/81/thread.html

>
"If a thread attempts to use the connection while another one is using
it, it will wait until the other thread has finished its current
operation. If the operation is a regular SQL statement, then the
operation consists of sending the statement and retrieving any ResultSet
(in full)."


Consider this test case: one thread calls executeQuery("SELECT ..."), and while that query is still executing, a second thread calls close() on the statement.

Given the documentation above, I would expect the regular SQL statement to complete, the statement then to be closed, and no exception thrown.


I'll attach a sample code for this scenario. With the current git driver, this fails at getMaxRows().

When you change Jdbc4Statement.createResultset() so it uses this.maxrows instead of getMaxRows() and hence skip checkClosed, then that test will pass. Patch also attached, although I have no idea whether this really is the right thing to do.


Still, I will also check my code. I think this happens when a user closes a view while the data inside is (re)loading, so I'll probably have the error handling discard that exception in this case instead of ringing the alarm bell...


Thanks for your comments, David and Kevin!

Best regards,

        -hannes

В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Hannes Erven
Дата:
Сообщение: Re: executeQuery() throws "Statement has been closed"
Следующее
От: David Ventimiglia
Дата:
Сообщение: What version of JUnit, again?