From: | "Roy Smith" <roy(dot)smith(at)primetext(dot)com> |
---|---|
To: | "Kris Jurka" <books(at)ejurka(dot)com> |
Cc: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | Re: Couple of preparedstatement bug suspects |
Date: | 2008-05-09 04:41:29 |
Message-ID: | 6a1128300805082141x4d239a9ft4c78ffc0f9082ae0@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Hi Kris
Thanks for the quick response.
No the app is not multithreaded. It's a web app and I'm the only user on my
local test PC. So I start tomcat, run a single post which generates the
error, stop tomcat.
I didn't understand your 2nd point. When I call
PreparedStatement.executeUpdate() I have to know that the row did or did not
get written. If there is a situation that an exception can be thrown after
the data has been written, that exception needs to be unambiguous in telling
the caller that the data is written or not.
I'm happy to provide any debug/logs which help you with this one, just let
me know.
best
Roy
On Fri, May 9, 2008 at 5:14 AM, Kris Jurka <books(at)ejurka(dot)com> wrote:
>
>
> On Fri, 9 May 2008, Roy Smith wrote:
>
> I have an app which inserts rows to a table called messages. During load
>> testing, I'm looping to insert 10,000 rows. Intermittentently (around 5% and
>> only after the first 6,000 or so) I'm getting the following Exception...
>>
>> org.postgresql.util.PSQLException: This statement has been closed.
>> at
>>
>> org.postgresql.jdbc2.AbstractJdbc2Statement.checkClosed(AbstractJdbc2Statement.java:2442)
>> at
>>
>> org.postgresql.jdbc2.AbstractJdbc2Statement.getUpdateCount(AbstractJdbc2Statement.java:495)
>> at
>>
>> org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:309)
>> at com.primetext.tl2000.dataobjects.Messages.insert(Messages.java:566)
>>
>> This smells like a bug. There are other updates within my loop, and I
>> can't promise that I'm closing all statements. Therefore if this bug is
>> being triggered by me abusing the driver, please confirm and I'll go through
>> all of my code ensuring that all preparedstatements are being closed.
>>
>>
> Is your app multi-threaded? The only way I see for this to happen is that
> one thread is executing the statement and another is closing it.
>
> However, there is a another aspect of this which smells like an even
>> bigger bug... Even though the PreparedStatement.executeUpdate is throwing an
>> exception, the row *is* being written to the database!! This can't possibly
>> be valid.
>>
>>
> The exception is from the driver, not the server and it happens after the
> query has been executed by the server. Once the server has committed the
> data, there's not much the driver can do about that.
>
> Kris Jurka
>
From | Date | Subject | |
---|---|---|---|
Next Message | dombrd | 2008-05-09 19:28:12 | Re: Correct getScale() behavior? |
Previous Message | Kris Jurka | 2008-05-09 04:14:22 | Re: Couple of preparedstatement bug suspects |