Re: Exception while updating result set

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
>>
>

In response to

Browse pgsql-jdbc by date

  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