Re: Batch Update updatecounts when error happens

From: Barry Lind <barry(at)xythos(dot)com>
To: Padraic Renaghan <list(at)renaghan(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Batch Update updatecounts when error happens
Date: 2002-09-02 03:10:56
Message-ID: 3D72D6C0.7000901@xythos.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Padraic,

The behavior in the driver that you are seeing is correct according to
the jdbc spec. Your suggested changes actually violate the jdbc spec.
From section 6.1.1 of the JDBC2.1 Core API:

"JDBC drivers that do not continue processing after a failure never
return -3 in an update count array. Drivers of this type simply return a
status array containing an entry for each command that was processed
successfully."

thanks,
--Barry

Padraic Renaghan wrote:

>Sorry for talking with myself again...
>
>So I tried the code change below. Got slightly better results:
>
>updateCounts[0]=1
>updateCounts[1]=0
>
>I really think that second entry should be a -3. So I added one more
>line to that block so it now becomes:
>
>result[i]=-3;
>int len=i+1;
>int[] resultSucceeded = new int[len];
>System.arraycopy(result, 0, resultSucceeded, 0, len);
>
>This worked best. I now get
>
>updateCounts[0]=1
>updateCounts[1]=-3
>
>So if folks think that is a valid change, I'll whip up a patch file
>and send it back to this list for further consideration.
>
>Thoughts?
>
>Thanks,
>Padraic
>
>* Padraic Renaghan <list(at)renaghan(dot)com> [Aug 28 12:12pm]:
>
>
>
>>I think I might have figured it out. I think there might be a bug in the
>>Postgresql driver. Specifically in the jdbc2/Statement.java file, the lines in
>>executeBatch() that read:
>>
>> int[] resultSucceeded = new int[i];
>> System.arraycopy(result, 0, resultSucceeded, 0, i);
>>
>>should really be:
>>
>> int len = i+1;
>> int[] resultSucceeded = new int[len];
>> System.arraycopy(result, 0, resultSucceeded, 0, len);
>>
>>I think that would do the trick. I'll now working on getting a modified version
>>built so I can test it.
>>
>>Think I'm on the right track? wrong track?
>>
>>
>>Thanks,
>>Padraic
>>
>>Quoting Padraic Renaghan <list(at)renaghan(dot)com>:
>>
>>
>>>I'm having trouble with the error handling of the batch update feature
>>>of the
>>>JDBC 2.0 Postgresql driver. I do not see the standard behavior of
>>>returing a -3
>>>for the statement that failed.
>>>
>>>In my example I insert mutliple rows in a single batch into a table. All
>>>the
>>>inserts have the same key value, which causes the second insert to fail
>>>with a
>>>duplicate key error.
>>>
>>>I get thrown back the BatchUpdateException which has the updateCounts
>>>array
>>>which I access via getUpdateCounts(). That array contains a single
>>>entry,
>>>updateCounts[0]=1. I am not seeing the -3 entry to indicate the stmt
>>>that
>>>failed. According to my assumptions about how JDBC 2.0 batch updates are
>>>
>>>supposed to work (and according to the JDBC--Postgresql compatability
>>>web page)
>>>I was hoping to see the updateCounts array contain:
>>>updateCounts[0]=1
>>>updateCounts[1]=-3
>>>
>>>I'm currently using Postgresql 7.2 and the JDBC driver installed with
>>>the
>>>Postgresql distributed rpm. Specifically I'm using jdbc7.2dev-1.2.jar
>>>
>>>Any help would be appreciated.
>>>
>>>Thanks
>>>Padraic
>>>
>>>
>>>
>>--
>>Padraic Renaghan /pad-rik ren-a-han/
>>padraic(at)renaghan(dot)com
>>IM: abuhaina (AOL/Yahoo/MSN) 9437815 (ICQ)
>>http://renaghan.com/pcr/
>>lure -> 390sig006(at)renaghan(dot)com <- don't use
>>
>>
>>
>
>
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Barry Lind 2002-09-02 03:11:07 Re: setBlob loop performance?
Previous Message Barry Lind 2002-09-02 03:10:41 Re: JDBC Blob API bug?