23
23
import java .sql .Statement ;
24
24
import java .sql .Time ;
25
25
import java .sql .Timestamp ;
26
+ import java .time .Instant ;
27
+ import java .time .LocalDate ;
28
+ import java .time .LocalDateTime ;
29
+ import java .time .LocalTime ;
30
+ import java .time .ZonedDateTime ;
26
31
import java .util .ArrayList ;
27
32
import java .util .Calendar ;
28
33
import java .util .Collection ;
@@ -46,6 +51,8 @@ public class DetachedResultSet implements ResultSet, JdbcV2Wrapper {
46
51
47
52
private ResultSetMetaData metaData ;
48
53
54
+ private final Calendar defaultCalendar ;
55
+
49
56
private Map <String , Object > record ;
50
57
51
58
private boolean wasNull ;
@@ -58,10 +65,11 @@ public class DetachedResultSet implements ResultSet, JdbcV2Wrapper {
58
65
59
66
private Map <String , Integer > columnMap ;
60
67
61
- private DetachedResultSet (List <Map <String , Object >> records , ResultSetMetaData metaData ) throws SQLException {
68
+ private DetachedResultSet (List <Map <String , Object >> records , ResultSetMetaData metaData , Calendar defaultCalendar ) throws SQLException {
62
69
this .records = records ;
63
70
this .iterator = records .listIterator ();
64
71
this .metaData = metaData ;
72
+ this .defaultCalendar = defaultCalendar ;
65
73
this .wasNull = false ;
66
74
this .row = ResultSetImpl .BEFORE_FIRST ;
67
75
this .lastRow = records .size ();
@@ -73,7 +81,7 @@ private DetachedResultSet(List<Map<String, Object>> records, ResultSetMetaData m
73
81
}
74
82
}
75
83
76
- public static DetachedResultSet createFromResultSet (ResultSet resultSet , Collection <Consumer <Map <String , Object >>> mutators ) throws SQLException {
84
+ public static DetachedResultSet createFromResultSet (ResultSet resultSet , Calendar defaultCalendar , Collection <Consumer <Map <String , Object >>> mutators ) throws SQLException {
77
85
ResultSetMetaData metaData = resultSet .getMetaData ();
78
86
List <Map <String , Object >> records = new ArrayList <>();
79
87
while (resultSet .next ()) {
@@ -86,7 +94,7 @@ public static DetachedResultSet createFromResultSet(ResultSet resultSet, Collect
86
94
}
87
95
records .add (record );
88
96
}
89
- return new DetachedResultSet (records , metaData );
97
+ return new DetachedResultSet (records , metaData , defaultCalendar );
90
98
}
91
99
92
100
@ Override
@@ -263,19 +271,19 @@ public byte[] getBytes(String columnLabel) throws SQLException {
263
271
@ Override
264
272
public Date getDate (String columnLabel ) throws SQLException {
265
273
ensureOpen ();
266
- return getObject (columnLabel , Date . class );
274
+ return getDate (columnLabel , defaultCalendar );
267
275
}
268
276
269
277
@ Override
270
278
public Time getTime (String columnLabel ) throws SQLException {
271
279
ensureOpen ();
272
- return getObject (columnLabel , Time . class );
280
+ return getTime (columnLabel , defaultCalendar );
273
281
}
274
282
275
283
@ Override
276
284
public Timestamp getTimestamp (String columnLabel ) throws SQLException {
277
285
ensureOpen ();
278
- return getObject (columnLabel , Timestamp . class );
286
+ return getTimestamp (columnLabel , defaultCalendar );
279
287
}
280
288
281
289
@ Override
@@ -783,7 +791,19 @@ public Date getDate(int columnIndex, Calendar cal) throws SQLException {
783
791
@ Override
784
792
public Date getDate (String columnLabel , Calendar cal ) throws SQLException {
785
793
ensureOpen ();
786
- return null ;
794
+ try {
795
+ Date date = getObject (columnLabel , Date .class );
796
+ if (date != null ) {
797
+ Calendar c = (Calendar ) (cal != null ? cal : defaultCalendar ).clone ();
798
+ c .clear ();
799
+ LocalDate ld = date .toLocalDate ();
800
+ c .set (ld .getYear (), ld .getMonthValue () - 1 , ld .getDayOfMonth (), 0 , 0 , 0 );
801
+ date = new Date (c .getTimeInMillis ());
802
+ }
803
+ return date ;
804
+ } catch (Exception e ) {
805
+ throw new SQLException (String .format ("Method: getDate(\" %s\" ) encountered an exception." , columnLabel ), e );
806
+ }
787
807
}
788
808
789
809
@ Override
@@ -794,7 +814,19 @@ public Time getTime(int columnIndex, Calendar cal) throws SQLException {
794
814
@ Override
795
815
public Time getTime (String columnLabel , Calendar cal ) throws SQLException {
796
816
ensureOpen ();
797
- return null ;
817
+ try {
818
+ Time time = getObject (columnLabel , Time .class );
819
+ if (time != null ) {
820
+ Calendar c = (Calendar ) (cal != null ? cal : defaultCalendar ).clone ();
821
+ c .clear ();
822
+ LocalTime ld = time .toLocalTime ();
823
+ c .set (1970 , Calendar .JANUARY , 1 , ld .getHour (), ld .getMinute (), ld .getSecond ());
824
+ time = new Time (c .getTimeInMillis ());
825
+ }
826
+ return time ;
827
+ } catch (Exception e ) {
828
+ throw new SQLException (String .format ("Method: getTime(\" %s\" ) encountered an exception." , columnLabel ), e );
829
+ }
798
830
}
799
831
800
832
@ Override
@@ -805,7 +837,22 @@ public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException
805
837
@ Override
806
838
public Timestamp getTimestamp (String columnLabel , Calendar cal ) throws SQLException {
807
839
ensureOpen ();
808
- return null ;
840
+ try {
841
+ Timestamp timestamp = getObject (columnLabel , Timestamp .class );
842
+ if (timestamp != null ) {
843
+ Calendar c = (Calendar ) (cal != null ? cal : defaultCalendar ).clone ();
844
+ c .clear ();
845
+ LocalDateTime ldt = timestamp .toLocalDateTime ();
846
+ c .set (ldt .getYear (), ldt .getMonthValue () - 1 , ldt .getDayOfMonth (), ldt .getHour (), ldt .getMinute (),
847
+ ldt .getSecond ());
848
+ timestamp = new Timestamp (c .getTimeInMillis ());
849
+ timestamp .setNanos (ldt .getNano ());
850
+ return timestamp ;
851
+ }
852
+ return timestamp ;
853
+ } catch (Exception e ) {
854
+ throw new SQLException (String .format ("Method: getTimestamp(\" %s\" ) encountered an exception." , columnLabel ), e );
855
+ }
809
856
}
810
857
811
858
@ Override
0 commit comments