25
25
import java .sql .DatabaseMetaData ;
26
26
import java .sql .PreparedStatement ;
27
27
import java .sql .SQLException ;
28
+ import java .sql .SQLFeatureNotSupportedException ;
28
29
import java .sql .Types ;
29
30
import java .time .LocalDate ;
30
31
import java .time .LocalDateTime ;
@@ -84,7 +85,7 @@ public abstract class StatementCreatorUtils {
84
85
85
86
private static final Log logger = LogFactory .getLog (StatementCreatorUtils .class );
86
87
87
- private static final Map <Class <?>, Integer > javaTypeToSqlTypeMap = new HashMap <>(32 );
88
+ private static final Map <Class <?>, Integer > javaTypeToSqlTypeMap = new HashMap <>(64 );
88
89
89
90
static {
90
91
javaTypeToSqlTypeMap .put (boolean .class , Types .BOOLEAN );
@@ -106,8 +107,8 @@ public abstract class StatementCreatorUtils {
106
107
javaTypeToSqlTypeMap .put (LocalDate .class , Types .DATE );
107
108
javaTypeToSqlTypeMap .put (LocalTime .class , Types .TIME );
108
109
javaTypeToSqlTypeMap .put (LocalDateTime .class , Types .TIMESTAMP );
109
- javaTypeToSqlTypeMap .put (OffsetDateTime .class , Types .TIMESTAMP_WITH_TIMEZONE );
110
110
javaTypeToSqlTypeMap .put (OffsetTime .class , Types .TIME_WITH_TIMEZONE );
111
+ javaTypeToSqlTypeMap .put (OffsetDateTime .class , Types .TIMESTAMP_WITH_TIMEZONE );
111
112
javaTypeToSqlTypeMap .put (java .sql .Date .class , Types .DATE );
112
113
javaTypeToSqlTypeMap .put (java .sql .Time .class , Types .TIME );
113
114
javaTypeToSqlTypeMap .put (java .sql .Timestamp .class , Types .TIMESTAMP );
@@ -290,7 +291,19 @@ else if (typeName != null) {
290
291
ps .setNull (paramIndex , sqlType , typeName );
291
292
}
292
293
else {
293
- ps .setNull (paramIndex , sqlType );
294
+ // Fall back to generic setNull call.
295
+ try {
296
+ // Try generic setNull call with SQL type specified.
297
+ ps .setNull (paramIndex , sqlType );
298
+ }
299
+ catch (SQLFeatureNotSupportedException ex ) {
300
+ if (sqlType == Types .NULL ) {
301
+ throw ex ;
302
+ }
303
+ // Fall back to generic setNull call without SQL type specified
304
+ // (e.g. for MySQL TIME_WITH_TIMEZONE / TIMESTAMP_WITH_TIMEZONE).
305
+ ps .setNull (paramIndex , Types .NULL );
306
+ }
294
307
}
295
308
}
296
309
@@ -415,8 +428,16 @@ else if (inValue instanceof Calendar cal) {
415
428
}
416
429
}
417
430
else {
418
- // Fall back to generic setObject call with SQL type specified.
419
- ps .setObject (paramIndex , inValue , sqlType );
431
+ // Fall back to generic setObject call.
432
+ try {
433
+ // Try generic setObject call with SQL type specified.
434
+ ps .setObject (paramIndex , inValue , sqlType );
435
+ }
436
+ catch (SQLFeatureNotSupportedException ex ) {
437
+ // Fall back to generic setObject call without SQL type specified
438
+ // (e.g. for MySQL TIME_WITH_TIMEZONE / TIMESTAMP_WITH_TIMEZONE).
439
+ ps .setObject (paramIndex , inValue );
440
+ }
420
441
}
421
442
}
422
443
0 commit comments