-
Notifications
You must be signed in to change notification settings - Fork 38.8k
Description
Rémi Aubel opened SPR-16669 and commented
PostgreSQL database defines the type UUID (this type does not exist in java.sql.Types).
I want to use this kind of PreparedStatement:
SELECT ... WHERE :VAL IS NOT NULL AND :VAL = <my_uuid_column>
And I want to bind a null value for VAL.
In this specific case, PostgreSQL JDBC driver requires the data type to be specified. And since the UUID data type does not exist in java.sql.Types, we must specify the type name as well, by calling PreparedStatement.setNull(\_, java.sql.Types.OTHER, "uuid").
With plain old java (Connection and PreparedStatement), this works fine.
Using NamedParameterJdbcTemplate (and providing the "data type" and "data type name" in a MapSqlParameterSource), I'm not able to make it work.
Under the hood, StatementCreatorUtils.setNull(\_, \_, type, typeName) delegates to PreparedStatement.setNull(\_, type) (with no type name) when type is Types.OTHER.
Shouldn't it call PreparedStatement.setNull(_, type, typeName) when typeName is provided (non null) instead?
Affects: 4.3.14, 5.0.4
Issue Links:
- Can't insert into nvarchar2 using SimpleJdbcInsert whereas it works with SimpleJdbcTemplate [SPR-8571] #13215 Can't insert into nvarchar2 using SimpleJdbcInsert whereas it works with SimpleJdbcTemplate
Referenced from: commits 9a722b4, 5629fa2
Backported to: 4.3.15