Re: Batch Update updatecounts when error happens - Mailing list pgsql-jdbc
From | Padraic Renaghan |
---|---|
Subject | Re: Batch Update updatecounts when error happens |
Date | |
Msg-id | Pine.WNT.4.44.0209021201150.572-100000@armagh Whole thread Raw |
In response to | Re: Batch Update updatecounts when error happens (Barry Lind <barry@xythos.com>) |
List | pgsql-jdbc |
Makes sense. Sorry about the confusion. I was writing some code on my local machine (laptop running Linux & pgsql) that I was also testing on our production box (Solaris with IBM DB2). I assumed they'd behave the same. Guess I need some "if isDB2()" logic in my error handler code. Thanks for the reply, Padraic * Barry Lind <barry@xythos.com> [Sep 1 8:10pm] > 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@renaghan.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@renaghan.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@renaghan.com > >>IM: abuhaina (AOL/Yahoo/MSN) 9437815 (ICQ) > >>http://renaghan.com/pcr/ > >>lure -> 390sig006@renaghan.com <- don't use > >> > >> > >> > > > > > > > > > -- Padraic Renaghan /pad-rik ren-a-han/ padraic@renaghan.com IM: abuhaina (AOL/Yahoo/MSN) 9437815 (ICQ) http://renaghan.com/pcr/ lure --> 123sig987@renaghan.com <-- don't use
pgsql-jdbc by date: