From: | Prasanth <dbadmin(at)pangburngroup(dot)com> |
---|---|
To: | pgsql-jdbc(at)lists(dot)postgresql(dot)org |
Subject: | Re: Exception while updating result set |
Date: | 2021-06-25 20:55:27 |
Message-ID: | 667b45cc-7feb-12c9-3ad9-52d1da99c473@pangburngroup.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Seems like if we call rs.absolute(1) after refreshRow() (to move to the row we are already on) prior to the second update on the same row the exception doesn't occur.
String sql = "SELECT * FROM accounting_periods where plan_id = 30756 order by start_date";
> ResultSet rs = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE ).executeQuery(sql);
> rs.next();
> rs.updateDate("start_date", Date.valueOf("2020-01-01"));
> rs.updateDate("end_date", Date.valueOf("2020-12-31"));
> rs.updateRow();
> rs.refreshRow();
rs.absolute(1); *// adding this call avoids the exception *
> rs.updateDate("end_date", Date.valueOf("2020-12-30"));
> rs.updateRow(); // Exception doesn't occur now. if the rs.absolute(1) is removed exception occurs again.
Also correction to my prior statement, this issue occurs with jdbc driver version 42.2.11 and above.
Thanks,
Prasanth
On 6/25/21 2:43 PM, Prasanth wrote:
> Sorry did not get the below email, just saw it in the website. Below is the sql.
>
> "SELECT * FROM accounting_periods where plan_id = 30756 order by start_date";
>
> Thanks,
> Prasanth
>
> On Thu, 25 Mar 2021 at 12:00, Prasanth <dbadmin(at)pangburngroup(dot)com> wrote:
>
> > Hi,
> >
> > Does anyone have any thoughts on this?
> >
> > Thanks,
> > Prasanth
> >
> > On 3/18/21 5:20 PM, Prasanth wrote:
> >
> > Hi,
> >
> > The following code generates an exception shown below. Commenting out the
> > refreshRow() call would solve the issue. This exception happens only in
> > driver versions 42.2.13 and above. Is this a bug in the driver?
> >
> > ResultSet rs = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
> > ResultSet.CONCUR_UPDATABLE ).executeQuery(sql);
> > rs.next();
> > rs.updateDate("start_date", Date.valueOf("2020-01-01"));
> > rs.updateDate("end_date", Date.valueOf("2020-12-31"));
> > rs.updateRow();
> > rs.refreshRow();
> > rs.updateDate("end_date", Date.valueOf("2020-12-30"));
> > rs.updateRow(); // Exception occurs at this line.
> >
> >
> > Exception in thread "main" java.lang.IllegalArgumentException: Attempted
> > to write to readonly tuple
> > at org.postgresql.core.Tuple.set(Tuple.java:96)
> > at
> > org.postgresql.jdbc.PgResultSet.setRowBufferColumn(PgResultSet.java:1680)
> > at
> > org.postgresql.jdbc.PgResultSet.updateRowBuffer(PgResultSet.java:1733)
> > at org.postgresql.jdbc.PgResultSet.updateRow(PgResultSet.java:1378)
> >
> > Thanks,
> > Prasanth
> >
> >
>
> What is the query ?
>
>
> From: Dave Cramer <davecramer(at)postgres(dot)rocks>
> To: dbadmin(at)pangburngroup(dot)com
> Cc: pgsql-jdbc(at)lists(dot)postgresql(dot)org
> Subject: Re: Exception while updating result set
> Date: 2021-03-29 14:19:13
> Message-ID: CADK3HHK8WPCxbhoE4dTt=U0jpmtGWMT0okXY5oj5SAE1b7T26Q(at)mail(dot)gmail(dot)com <https://www.postgresql.org/message-id/CADK3HHK8WPCxbhoE4dTt%3DU0jpmtGWMT0okXY5oj5SAE1b7T26Q%40mail.gmail.com>
> Views: Raw Message <https://www.postgresql.org/message-id/raw/CADK3HHK8WPCxbhoE4dTt%3DU0jpmtGWMT0okXY5oj5SAE1b7T26Q%40mail.gmail.com> | Whole Thread
> <https://www.postgresql.org/message-id/flat/CADK3HHK8WPCxbhoE4dTt%3DU0jpmtGWMT0okXY5oj5SAE1b7T26Q%40mail.gmail.com> | Download mbox
> <https://www.postgresql.org/message-id/mbox/CADK3HHK8WPCxbhoE4dTt%3DU0jpmtGWMT0okXY5oj5SAE1b7T26Q%40mail.gmail.com> | Resend email
> <https://www.postgresql.org/message-id/resend/CADK3HHK8WPCxbhoE4dTt%3DU0jpmtGWMT0okXY5oj5SAE1b7T26Q%40mail.gmail.com>
> Lists: pgsql-jdbc <https://www.postgresql.org/list/pgsql-jdbc/since/202103291419>
>
>
>
> On 3/25/21 11:00 AM, Prasanth wrote:
>> Hi,
>>
>> Does anyone have any thoughts on this?
>>
>> Thanks,
>> Prasanth
>>
>> On 3/18/21 5:20 PM, Prasanth wrote:
>>> Hi,
>>>
>>> The following code generates an exception shown below. Commenting out the refreshRow() call would solve the issue. This exception happens only in driver versions 42.2.13 and above. Is this a bug
>>> in the driver?
>>>
>>> ResultSet rs = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE ).executeQuery(sql);
>>> rs.next();
>>> rs.updateDate("start_date", Date.valueOf("2020-01-01"));
>>> rs.updateDate("end_date", Date.valueOf("2020-12-31"));
>>> rs.updateRow();
>>> rs.refreshRow();
>>> rs.updateDate("end_date", Date.valueOf("2020-12-30"));
>>> rs.updateRow(); // Exception occurs at this line.
>>>
>>>
>>> Exception in thread "main" java.lang.IllegalArgumentException: Attempted to write to readonly tuple
>>> at org.postgresql.core.Tuple.set(Tuple.java:96)
>>> at org.postgresql.jdbc.PgResultSet.setRowBufferColumn(PgResultSet.java:1680)
>>> at org.postgresql.jdbc.PgResultSet.updateRowBuffer(PgResultSet.java:1733)
>>> at org.postgresql.jdbc.PgResultSet.updateRow(PgResultSet.java:1378)
>>>
>>> Thanks,
>>> Prasanth
>>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Dave Cramer | 2021-06-26 10:49:03 | Re: Exception while updating result set |
Previous Message | Prasanth | 2021-06-25 19:43:19 | Re: Exception while updating result set |