Обсуждение: BUG #16230: Boolean column stick to "false" after calling updateRow() on updateable ResultSet
BUG #16230: Boolean column stick to "false" after calling updateRow() on updateable ResultSet
От
PG Bug reporting form
Дата:
The following bug has been logged on the website: Bug reference: 16230 Logged by: Clemens Eisserer Email address: linuxhippy@gmail.com PostgreSQL version: 12.1 Operating system: linux / platform independent Description: Boolean columns always seem to stick to "false" after updateRow() is called on updateable ResultSets (this is a regression and worked with PostgreSQL-8.4.21 & postgresql-8.4-701.jdbc3.jar ). The value stored however is correct, and calling refreshRow() right after updateRow() seems to restore the "old" behaviour and restores the value set a few lines aboce. In PgResultSet.getBoolean() there is manual type conversion from byte[] to boolean going on: int col = columnIndex - 1; if (Oid.BOOL == fields[col].getOID()) { final byte[] v = thisRow[col]; return (1 == v.length) && (116 == v[0]); // 116 = 't' } ... so in case the value of thisRow[col] is a single character with the letter 't' the check succeeds. This is the case when the value was sent from the server (right after the select or after calling refreshRow()). However after updateRow(), fields[col]. contains the string "true", because of length != 1, the check fails. Code to trigger the problem: //DDL CREATE TABLE sometable (id integer NOT NULL, someprop boolean DEFAULT false); //JDBC access Statement st = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = st.executeQuery("SELECT * FROM sometable WHERE id=..."); rs.next(); System.out.println(rs.getBoolean("someprop")); // value stored in DB rs.updateBoolean("vereinsFlugzeug", true); System.out.println(rs.getBoolean("someprop")); //Matches the value set above (true) rs.updateRow(); // rs.refreshRow(); //fetches the value stored System.out.println(rs.getBoolean("someprop")); // always returns false.
Re: BUG #16230: Boolean column stick to "false" after callingupdateRow() on updateable ResultSet
От
"David G. Johnston"
Дата:
On Sat, Jan 25, 2020 at 12:06 PM PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:
Bug reference: 16230
Logged by: Clemens Eisserer
Email address: linuxhippy@gmail.com
PostgreSQL version: 12.1
Operating system: linux / platform independent
Description:
Boolean columns always seem to stick to "false" after updateRow() is called
on updateable ResultSets (this is a regression and worked with
PostgreSQL-8.4.21 & postgresql-8.4-701.jdbc3.jar ).
The core PostgreSQL team doesn't maintain the pgJDBC driver. You need to report this to them using their process.
David J.