View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.dbcp2;
18  
19  import java.io.InputStream;
20  import java.io.Reader;
21  import java.math.BigDecimal;
22  import java.sql.Array;
23  import java.sql.Blob;
24  import java.sql.Clob;
25  import java.sql.Connection;
26  import java.sql.Date;
27  import java.sql.NClob;
28  import java.sql.Ref;
29  import java.sql.ResultSet;
30  import java.sql.ResultSetMetaData;
31  import java.sql.RowId;
32  import java.sql.SQLException;
33  import java.sql.SQLType;
34  import java.sql.SQLWarning;
35  import java.sql.SQLXML;
36  import java.sql.Statement;
37  import java.sql.Time;
38  import java.sql.Timestamp;
39  import java.util.Calendar;
40  import java.util.Map;
41  
42  /**
43   * A base delegating implementation of {@link ResultSet}.
44   * <p>
45   * All of the methods from the {@link ResultSet} interface simply call the corresponding method on the "delegate"
46   * provided in my constructor.
47   * </p>
48   * <p>
49   * Extends AbandonedTrace to implement result set tracking and logging of code which created the ResultSet. Tracking the
50   * ResultSet ensures that the Statement which created it can close any open ResultSet's on Statement close.
51   * </p>
52   *
53   * @since 2.0
54   */
55  public final class DelegatingResultSet extends AbandonedTrace implements ResultSet {
56  
57      /**
58       * Wraps the given result set in a delegate.
59       *
60       * @param connection
61       *            The Connection which created the ResultSet.
62       * @param resultSet
63       *            The ResultSet to wrap.
64       * @return a new delegate.
65       */
66      public static ResultSet wrapResultSet(final Connection connection, final ResultSet resultSet) {
67          if (null == resultSet) {
68              return null;
69          }
70          return new DelegatingResultSet(connection, resultSet);
71      }
72  
73      /**
74       * Wraps the given result set in a delegate.
75       *
76       * @param statement
77       *            The Statement which created the ResultSet.
78       * @param resultSet
79       *            The ResultSet to wrap.
80       * @return a new delegate.
81       */
82      public static ResultSet wrapResultSet(final Statement statement, final ResultSet resultSet) {
83          if (null == resultSet) {
84              return null;
85          }
86          return new DelegatingResultSet(statement, resultSet);
87      }
88  
89      /** My delegate. **/
90      private final ResultSet resultSet;
91  
92      /** The Statement that created me, if any. **/
93      private Statement statement;
94  
95      /** The Connection that created me, if any. **/
96      private Connection connection;
97  
98      /**
99       * Creates a wrapper for the ResultSet which traces this ResultSet to the Connection which created it (via, for
100      * example DatabaseMetadata), and the code which created it.
101      * <p>
102      * Private to ensure all construction is {@link #wrapResultSet(Connection, ResultSet)}
103      * </p>
104      *
105      * @param connection
106      *            Connection which created this ResultSet
107      * @param resultSet
108      *            ResultSet to wrap
109      */
110     private DelegatingResultSet(final Connection connection, final ResultSet resultSet) {
111         super((AbandonedTrace) connection);
112         this.connection = connection;
113         this.resultSet = resultSet;
114     }
115 
116     /**
117      * Creates a wrapper for the ResultSet which traces this ResultSet to the Statement which created it and the code
118      * which created it.
119      * <p>
120      * Private to ensure all construction is {@link #wrapResultSet(Statement, ResultSet)}
121      * </p>
122      *
123      * @param statement
124      *            The Statement which created the ResultSet.
125      * @param resultSet
126      *            The ResultSet to wrap.
127      */
128     private DelegatingResultSet(final Statement statement, final ResultSet resultSet) {
129         super((AbandonedTrace) statement);
130         this.statement = statement;
131         this.resultSet = resultSet;
132     }
133 
134     @Override
135     public boolean absolute(final int row) throws SQLException {
136         try {
137             return resultSet.absolute(row);
138         } catch (final SQLException e) {
139             handleException(e);
140             return false;
141         }
142     }
143 
144     @Override
145     public void afterLast() throws SQLException {
146         try {
147             resultSet.afterLast();
148         } catch (final SQLException e) {
149             handleException(e);
150         }
151     }
152 
153     @Override
154     public void beforeFirst() throws SQLException {
155         try {
156             resultSet.beforeFirst();
157         } catch (final SQLException e) {
158             handleException(e);
159         }
160     }
161 
162     @Override
163     public void cancelRowUpdates() throws SQLException {
164         try {
165             resultSet.cancelRowUpdates();
166         } catch (final SQLException e) {
167             handleException(e);
168         }
169     }
170 
171     @Override
172     public void clearWarnings() throws SQLException {
173         try {
174             resultSet.clearWarnings();
175         } catch (final SQLException e) {
176             handleException(e);
177         }
178     }
179 
180     /**
181      * Wrapper for close of ResultSet which removes this result set from being traced then calls close on the original
182      * ResultSet.
183      */
184     @Override
185     public void close() throws SQLException {
186         try {
187             if (statement != null) {
188                 removeThisTrace(statement);
189                 statement = null;
190             }
191             if (connection != null) {
192                 removeThisTrace(connection);
193                 connection = null;
194             }
195             resultSet.close();
196         } catch (final SQLException e) {
197             handleException(e);
198         }
199     }
200 
201     @Override
202     public void deleteRow() throws SQLException {
203         try {
204             resultSet.deleteRow();
205         } catch (final SQLException e) {
206             handleException(e);
207         }
208     }
209 
210     @Override
211     public int findColumn(final String columnName) throws SQLException {
212         try {
213             return resultSet.findColumn(columnName);
214         } catch (final SQLException e) {
215             handleException(e);
216             return 0;
217         }
218     }
219 
220     @Override
221     public boolean first() throws SQLException {
222         try {
223             return resultSet.first();
224         } catch (final SQLException e) {
225             handleException(e);
226             return false;
227         }
228     }
229 
230     @Override
231     public Array getArray(final int i) throws SQLException {
232         try {
233             return resultSet.getArray(i);
234         } catch (final SQLException e) {
235             handleException(e);
236             return null;
237         }
238     }
239 
240     @Override
241     public Array getArray(final String colName) throws SQLException {
242         try {
243             return resultSet.getArray(colName);
244         } catch (final SQLException e) {
245             handleException(e);
246             return null;
247         }
248     }
249 
250     @Override
251     public InputStream getAsciiStream(final int columnIndex) throws SQLException {
252         try {
253             return resultSet.getAsciiStream(columnIndex);
254         } catch (final SQLException e) {
255             handleException(e);
256             return null;
257         }
258     }
259 
260     @Override
261     public InputStream getAsciiStream(final String columnName) throws SQLException {
262         try {
263             return resultSet.getAsciiStream(columnName);
264         } catch (final SQLException e) {
265             handleException(e);
266             return null;
267         }
268     }
269 
270     @Override
271     public BigDecimal getBigDecimal(final int columnIndex) throws SQLException {
272         try {
273             return resultSet.getBigDecimal(columnIndex);
274         } catch (final SQLException e) {
275             handleException(e);
276             return null;
277         }
278     }
279 
280     /** @deprecated Use {@link #getBigDecimal(int)} */
281     @Deprecated
282     @Override
283     public BigDecimal getBigDecimal(final int columnIndex, final int scale) throws SQLException {
284         try {
285             return resultSet.getBigDecimal(columnIndex);
286         } catch (final SQLException e) {
287             handleException(e);
288             return null;
289         }
290     }
291 
292     @Override
293     public BigDecimal getBigDecimal(final String columnName) throws SQLException {
294         try {
295             return resultSet.getBigDecimal(columnName);
296         } catch (final SQLException e) {
297             handleException(e);
298             return null;
299         }
300     }
301 
302     /** @deprecated Use {@link #getBigDecimal(String)} */
303     @Deprecated
304     @Override
305     public BigDecimal getBigDecimal(final String columnName, final int scale) throws SQLException {
306         try {
307             return resultSet.getBigDecimal(columnName);
308         } catch (final SQLException e) {
309             handleException(e);
310             return null;
311         }
312     }
313 
314     @Override
315     public InputStream getBinaryStream(final int columnIndex) throws SQLException {
316         try {
317             return resultSet.getBinaryStream(columnIndex);
318         } catch (final SQLException e) {
319             handleException(e);
320             return null;
321         }
322     }
323 
324     @Override
325     public InputStream getBinaryStream(final String columnName) throws SQLException {
326         try {
327             return resultSet.getBinaryStream(columnName);
328         } catch (final SQLException e) {
329             handleException(e);
330             return null;
331         }
332     }
333 
334     @Override
335     public Blob getBlob(final int i) throws SQLException {
336         try {
337             return resultSet.getBlob(i);
338         } catch (final SQLException e) {
339             handleException(e);
340             return null;
341         }
342     }
343 
344     @Override
345     public Blob getBlob(final String colName) throws SQLException {
346         try {
347             return resultSet.getBlob(colName);
348         } catch (final SQLException e) {
349             handleException(e);
350             return null;
351         }
352     }
353 
354     @Override
355     public boolean getBoolean(final int columnIndex) throws SQLException {
356         try {
357             return resultSet.getBoolean(columnIndex);
358         } catch (final SQLException e) {
359             handleException(e);
360             return false;
361         }
362     }
363 
364     @Override
365     public boolean getBoolean(final String columnName) throws SQLException {
366         try {
367             return resultSet.getBoolean(columnName);
368         } catch (final SQLException e) {
369             handleException(e);
370             return false;
371         }
372     }
373 
374     @Override
375     public byte getByte(final int columnIndex) throws SQLException {
376         try {
377             return resultSet.getByte(columnIndex);
378         } catch (final SQLException e) {
379             handleException(e);
380             return 0;
381         }
382     }
383 
384     @Override
385     public byte getByte(final String columnName) throws SQLException {
386         try {
387             return resultSet.getByte(columnName);
388         } catch (final SQLException e) {
389             handleException(e);
390             return 0;
391         }
392     }
393 
394     @Override
395     public byte[] getBytes(final int columnIndex) throws SQLException {
396         try {
397             return resultSet.getBytes(columnIndex);
398         } catch (final SQLException e) {
399             handleException(e);
400             return null;
401         }
402     }
403 
404     @Override
405     public byte[] getBytes(final String columnName) throws SQLException {
406         try {
407             return resultSet.getBytes(columnName);
408         } catch (final SQLException e) {
409             handleException(e);
410             return null;
411         }
412     }
413 
414     @Override
415     public Reader getCharacterStream(final int columnIndex) throws SQLException {
416         try {
417             return resultSet.getCharacterStream(columnIndex);
418         } catch (final SQLException e) {
419             handleException(e);
420             return null;
421         }
422     }
423 
424     @Override
425     public Reader getCharacterStream(final String columnName) throws SQLException {
426         try {
427             return resultSet.getCharacterStream(columnName);
428         } catch (final SQLException e) {
429             handleException(e);
430             return null;
431         }
432     }
433 
434     @Override
435     public Clob getClob(final int i) throws SQLException {
436         try {
437             return resultSet.getClob(i);
438         } catch (final SQLException e) {
439             handleException(e);
440             return null;
441         }
442     }
443 
444     @Override
445     public Clob getClob(final String colName) throws SQLException {
446         try {
447             return resultSet.getClob(colName);
448         } catch (final SQLException e) {
449             handleException(e);
450             return null;
451         }
452     }
453 
454     @Override
455     public int getConcurrency() throws SQLException {
456         try {
457             return resultSet.getConcurrency();
458         } catch (final SQLException e) {
459             handleException(e);
460             return 0;
461         }
462     }
463 
464     @Override
465     public String getCursorName() throws SQLException {
466         try {
467             return resultSet.getCursorName();
468         } catch (final SQLException e) {
469             handleException(e);
470             return null;
471         }
472     }
473 
474     @Override
475     public Date getDate(final int columnIndex) throws SQLException {
476         try {
477             return resultSet.getDate(columnIndex);
478         } catch (final SQLException e) {
479             handleException(e);
480             return null;
481         }
482     }
483 
484     @Override
485     public Date getDate(final int columnIndex, final Calendar cal) throws SQLException {
486         try {
487             return resultSet.getDate(columnIndex, cal);
488         } catch (final SQLException e) {
489             handleException(e);
490             return null;
491         }
492     }
493 
494     @Override
495     public Date getDate(final String columnName) throws SQLException {
496         try {
497             return resultSet.getDate(columnName);
498         } catch (final SQLException e) {
499             handleException(e);
500             return null;
501         }
502     }
503 
504     @Override
505     public Date getDate(final String columnName, final Calendar cal) throws SQLException {
506         try {
507             return resultSet.getDate(columnName, cal);
508         } catch (final SQLException e) {
509             handleException(e);
510             return null;
511         }
512     }
513 
514     /**
515      * Gets my delegate.
516      *
517      * @return my delegate.
518      */
519     public ResultSet getDelegate() {
520         return resultSet;
521     }
522 
523     @Override
524     public double getDouble(final int columnIndex) throws SQLException {
525         try {
526             return resultSet.getDouble(columnIndex);
527         } catch (final SQLException e) {
528             handleException(e);
529             return 0;
530         }
531     }
532 
533     @Override
534     public double getDouble(final String columnName) throws SQLException {
535         try {
536             return resultSet.getDouble(columnName);
537         } catch (final SQLException e) {
538             handleException(e);
539             return 0;
540         }
541     }
542 
543     @Override
544     public int getFetchDirection() throws SQLException {
545         try {
546             return resultSet.getFetchDirection();
547         } catch (final SQLException e) {
548             handleException(e);
549             return 0;
550         }
551     }
552 
553     @Override
554     public int getFetchSize() throws SQLException {
555         try {
556             return resultSet.getFetchSize();
557         } catch (final SQLException e) {
558             handleException(e);
559             return 0;
560         }
561     }
562 
563     @Override
564     public float getFloat(final int columnIndex) throws SQLException {
565         try {
566             return resultSet.getFloat(columnIndex);
567         } catch (final SQLException e) {
568             handleException(e);
569             return 0;
570         }
571     }
572 
573     @Override
574     public float getFloat(final String columnName) throws SQLException {
575         try {
576             return resultSet.getFloat(columnName);
577         } catch (final SQLException e) {
578             handleException(e);
579             return 0;
580         }
581     }
582 
583     @Override
584     public int getHoldability() throws SQLException {
585         try {
586             return resultSet.getHoldability();
587         } catch (final SQLException e) {
588             handleException(e);
589             return 0;
590         }
591     }
592 
593     /**
594      * If my underlying {@link ResultSet} is not a {@link DelegatingResultSet}, returns it, otherwise recursively
595      * invokes this method on my delegate.
596      * <p>
597      * Hence this method will return the first delegate that is not a {@link DelegatingResultSet}, or {@code null} when
598      * no non-{@link DelegatingResultSet} delegate can be found by traversing this chain.
599      * </p>
600      * <p>
601      * This method is useful when you may have nested {@link DelegatingResultSet}s, and you want to make sure to obtain
602      * a "genuine" {@link ResultSet}.
603      * </p>
604      *
605      * @return the innermost delegate.
606      */
607     @SuppressWarnings("resource")
608     public ResultSet getInnermostDelegate() {
609         ResultSet r = resultSet;
610         while (r instanceof DelegatingResultSet) {
611             r = ((DelegatingResultSet) r).getDelegate();
612             if (this == r) {
613                 return null;
614             }
615         }
616         return r;
617     }
618 
619     @Override
620     public int getInt(final int columnIndex) throws SQLException {
621         try {
622             return resultSet.getInt(columnIndex);
623         } catch (final SQLException e) {
624             handleException(e);
625             return 0;
626         }
627     }
628 
629     @Override
630     public int getInt(final String columnName) throws SQLException {
631         try {
632             return resultSet.getInt(columnName);
633         } catch (final SQLException e) {
634             handleException(e);
635             return 0;
636         }
637     }
638 
639     @Override
640     public long getLong(final int columnIndex) throws SQLException {
641         try {
642             return resultSet.getLong(columnIndex);
643         } catch (final SQLException e) {
644             handleException(e);
645             return 0;
646         }
647     }
648 
649     @Override
650     public long getLong(final String columnName) throws SQLException {
651         try {
652             return resultSet.getLong(columnName);
653         } catch (final SQLException e) {
654             handleException(e);
655             return 0;
656         }
657     }
658 
659     @Override
660     public ResultSetMetaData getMetaData() throws SQLException {
661         try {
662             return resultSet.getMetaData();
663         } catch (final SQLException e) {
664             handleException(e);
665             return null;
666         }
667     }
668 
669     @Override
670     public Reader getNCharacterStream(final int columnIndex) throws SQLException {
671         try {
672             return resultSet.getNCharacterStream(columnIndex);
673         } catch (final SQLException e) {
674             handleException(e);
675             return null;
676         }
677     }
678 
679     @Override
680     public Reader getNCharacterStream(final String columnLabel) throws SQLException {
681         try {
682             return resultSet.getNCharacterStream(columnLabel);
683         } catch (final SQLException e) {
684             handleException(e);
685             return null;
686         }
687     }
688 
689     @Override
690     public NClob getNClob(final int columnIndex) throws SQLException {
691         try {
692             return resultSet.getNClob(columnIndex);
693         } catch (final SQLException e) {
694             handleException(e);
695             return null;
696         }
697     }
698 
699     @Override
700     public NClob getNClob(final String columnLabel) throws SQLException {
701         try {
702             return resultSet.getNClob(columnLabel);
703         } catch (final SQLException e) {
704             handleException(e);
705             return null;
706         }
707     }
708 
709     @Override
710     public String getNString(final int columnIndex) throws SQLException {
711         try {
712             return resultSet.getNString(columnIndex);
713         } catch (final SQLException e) {
714             handleException(e);
715             return null;
716         }
717     }
718 
719     @Override
720     public String getNString(final String columnLabel) throws SQLException {
721         try {
722             return resultSet.getNString(columnLabel);
723         } catch (final SQLException e) {
724             handleException(e);
725             return null;
726         }
727     }
728 
729     @Override
730     public Object getObject(final int columnIndex) throws SQLException {
731         try {
732             return resultSet.getObject(columnIndex);
733         } catch (final SQLException e) {
734             handleException(e);
735             return null;
736         }
737     }
738 
739     @Override
740     public <T> T getObject(final int columnIndex, final Class<T> type) throws SQLException {
741         try {
742             return Jdbc41Bridge.getObject(resultSet, columnIndex, type);
743         } catch (final SQLException e) {
744             handleException(e);
745             return null;
746         }
747     }
748 
749     @Override
750     public Object getObject(final int i, final Map<String, Class<?>> map) throws SQLException {
751         try {
752             return resultSet.getObject(i, map);
753         } catch (final SQLException e) {
754             handleException(e);
755             return null;
756         }
757     }
758 
759     @Override
760     public Object getObject(final String columnName) throws SQLException {
761         try {
762             return resultSet.getObject(columnName);
763         } catch (final SQLException e) {
764             handleException(e);
765             return null;
766         }
767     }
768 
769     @Override
770     public <T> T getObject(final String columnLabel, final Class<T> type) throws SQLException {
771         try {
772             return Jdbc41Bridge.getObject(resultSet, columnLabel, type);
773         } catch (final SQLException e) {
774             handleException(e);
775             return null;
776         }
777     }
778 
779     @Override
780     public Object getObject(final String colName, final Map<String, Class<?>> map) throws SQLException {
781         try {
782             return resultSet.getObject(colName, map);
783         } catch (final SQLException e) {
784             handleException(e);
785             return null;
786         }
787     }
788 
789     @Override
790     public Ref getRef(final int i) throws SQLException {
791         try {
792             return resultSet.getRef(i);
793         } catch (final SQLException e) {
794             handleException(e);
795             return null;
796         }
797     }
798 
799     @Override
800     public Ref getRef(final String colName) throws SQLException {
801         try {
802             return resultSet.getRef(colName);
803         } catch (final SQLException e) {
804             handleException(e);
805             return null;
806         }
807     }
808 
809     @Override
810     public int getRow() throws SQLException {
811         try {
812             return resultSet.getRow();
813         } catch (final SQLException e) {
814             handleException(e);
815             return 0;
816         }
817     }
818 
819     @Override
820     public RowId getRowId(final int columnIndex) throws SQLException {
821         try {
822             return resultSet.getRowId(columnIndex);
823         } catch (final SQLException e) {
824             handleException(e);
825             return null;
826         }
827     }
828 
829     @Override
830     public RowId getRowId(final String columnLabel) throws SQLException {
831         try {
832             return resultSet.getRowId(columnLabel);
833         } catch (final SQLException e) {
834             handleException(e);
835             return null;
836         }
837     }
838 
839     @Override
840     public short getShort(final int columnIndex) throws SQLException {
841         try {
842             return resultSet.getShort(columnIndex);
843         } catch (final SQLException e) {
844             handleException(e);
845             return 0;
846         }
847     }
848 
849     @Override
850     public short getShort(final String columnName) throws SQLException {
851         try {
852             return resultSet.getShort(columnName);
853         } catch (final SQLException e) {
854             handleException(e);
855             return 0;
856         }
857     }
858 
859     @Override
860     public SQLXML getSQLXML(final int columnIndex) throws SQLException {
861         try {
862             return resultSet.getSQLXML(columnIndex);
863         } catch (final SQLException e) {
864             handleException(e);
865             return null;
866         }
867     }
868 
869     @Override
870     public SQLXML getSQLXML(final String columnLabel) throws SQLException {
871         try {
872             return resultSet.getSQLXML(columnLabel);
873         } catch (final SQLException e) {
874             handleException(e);
875             return null;
876         }
877     }
878 
879     @Override
880     public Statement getStatement() throws SQLException {
881         return statement;
882     }
883 
884     @Override
885     public String getString(final int columnIndex) throws SQLException {
886         try {
887             return resultSet.getString(columnIndex);
888         } catch (final SQLException e) {
889             handleException(e);
890             return null;
891         }
892     }
893 
894     @Override
895     public String getString(final String columnName) throws SQLException {
896         try {
897             return resultSet.getString(columnName);
898         } catch (final SQLException e) {
899             handleException(e);
900             return null;
901         }
902     }
903 
904     @Override
905     public Time getTime(final int columnIndex) throws SQLException {
906         try {
907             return resultSet.getTime(columnIndex);
908         } catch (final SQLException e) {
909             handleException(e);
910             return null;
911         }
912     }
913 
914     @Override
915     public Time getTime(final int columnIndex, final Calendar cal) throws SQLException {
916         try {
917             return resultSet.getTime(columnIndex, cal);
918         } catch (final SQLException e) {
919             handleException(e);
920             return null;
921         }
922     }
923 
924     @Override
925     public Time getTime(final String columnName) throws SQLException {
926         try {
927             return resultSet.getTime(columnName);
928         } catch (final SQLException e) {
929             handleException(e);
930             return null;
931         }
932     }
933 
934     @Override
935     public Time getTime(final String columnName, final Calendar cal) throws SQLException {
936         try {
937             return resultSet.getTime(columnName, cal);
938         } catch (final SQLException e) {
939             handleException(e);
940             return null;
941         }
942     }
943 
944     @Override
945     public Timestamp getTimestamp(final int columnIndex) throws SQLException {
946         try {
947             return resultSet.getTimestamp(columnIndex);
948         } catch (final SQLException e) {
949             handleException(e);
950             return null;
951         }
952     }
953 
954     @Override
955     public Timestamp getTimestamp(final int columnIndex, final Calendar cal) throws SQLException {
956         try {
957             return resultSet.getTimestamp(columnIndex, cal);
958         } catch (final SQLException e) {
959             handleException(e);
960             return null;
961         }
962     }
963 
964     @Override
965     public Timestamp getTimestamp(final String columnName) throws SQLException {
966         try {
967             return resultSet.getTimestamp(columnName);
968         } catch (final SQLException e) {
969             handleException(e);
970             return null;
971         }
972     }
973 
974     @Override
975     public Timestamp getTimestamp(final String columnName, final Calendar cal) throws SQLException {
976         try {
977             return resultSet.getTimestamp(columnName, cal);
978         } catch (final SQLException e) {
979             handleException(e);
980             return null;
981         }
982     }
983 
984     @Override
985     public int getType() throws SQLException {
986         try {
987             return resultSet.getType();
988         } catch (final SQLException e) {
989             handleException(e);
990             return 0;
991         }
992     }
993 
994     /** @deprecated Use {@link #getCharacterStream(int)} */
995     @Deprecated
996     @Override
997     public InputStream getUnicodeStream(final int columnIndex) throws SQLException {
998         try {
999             return resultSet.getUnicodeStream(columnIndex);
1000         } catch (final SQLException e) {
1001             handleException(e);
1002             return null;
1003         }
1004     }
1005 
1006     /** @deprecated Use {@link #getCharacterStream(String)} */
1007     @Deprecated
1008     @Override
1009     public InputStream getUnicodeStream(final String columnName) throws SQLException {
1010         try {
1011             return resultSet.getUnicodeStream(columnName);
1012         } catch (final SQLException e) {
1013             handleException(e);
1014             return null;
1015         }
1016     }
1017 
1018     @Override
1019     public java.net.URL getURL(final int columnIndex) throws SQLException {
1020         try {
1021             return resultSet.getURL(columnIndex);
1022         } catch (final SQLException e) {
1023             handleException(e);
1024             return null;
1025         }
1026     }
1027 
1028     @Override
1029     public java.net.URL getURL(final String columnName) throws SQLException {
1030         try {
1031             return resultSet.getURL(columnName);
1032         } catch (final SQLException e) {
1033             handleException(e);
1034             return null;
1035         }
1036     }
1037 
1038     @Override
1039     public SQLWarning getWarnings() throws SQLException {
1040         try {
1041             return resultSet.getWarnings();
1042         } catch (final SQLException e) {
1043             handleException(e);
1044             return null;
1045         }
1046     }
1047 
1048     /**
1049      * Handles a SQL exception by delegating to a DelegatingStatement or DelegatingConnection.
1050      *
1051      * @param e The exception to handle.
1052      * @throws SQLException Throws the given exception if not handled.
1053      */
1054     protected void handleException(final SQLException e) throws SQLException {
1055         if (statement instanceof DelegatingStatement) {
1056             ((DelegatingStatement) statement).handleException(e);
1057         } else if (connection instanceof DelegatingConnection) {
1058             ((DelegatingConnection<?>) connection).handleException(e);
1059         } else {
1060             throw e;
1061         }
1062     }
1063 
1064     @Override
1065     public void insertRow() throws SQLException {
1066         try {
1067             resultSet.insertRow();
1068         } catch (final SQLException e) {
1069             handleException(e);
1070         }
1071     }
1072 
1073     @Override
1074     public boolean isAfterLast() throws SQLException {
1075         try {
1076             return resultSet.isAfterLast();
1077         } catch (final SQLException e) {
1078             handleException(e);
1079             return false;
1080         }
1081     }
1082 
1083     @Override
1084     public boolean isBeforeFirst() throws SQLException {
1085         try {
1086             return resultSet.isBeforeFirst();
1087         } catch (final SQLException e) {
1088             handleException(e);
1089             return false;
1090         }
1091     }
1092 
1093     @Override
1094     public boolean isClosed() throws SQLException {
1095         try {
1096             return resultSet.isClosed();
1097         } catch (final SQLException e) {
1098             handleException(e);
1099             return false;
1100         }
1101     }
1102 
1103     @Override
1104     public boolean isFirst() throws SQLException {
1105         try {
1106             return resultSet.isFirst();
1107         } catch (final SQLException e) {
1108             handleException(e);
1109             return false;
1110         }
1111     }
1112 
1113     @Override
1114     public boolean isLast() throws SQLException {
1115         try {
1116             return resultSet.isLast();
1117         } catch (final SQLException e) {
1118             handleException(e);
1119             return false;
1120         }
1121     }
1122 
1123     @Override
1124     public boolean isWrapperFor(final Class<?> iface) throws SQLException {
1125         if (iface.isAssignableFrom(getClass()) || iface.isAssignableFrom(resultSet.getClass())) {
1126             return true;
1127         }
1128         return resultSet.isWrapperFor(iface);
1129     }
1130 
1131     @Override
1132     public boolean last() throws SQLException {
1133         try {
1134             return resultSet.last();
1135         } catch (final SQLException e) {
1136             handleException(e);
1137             return false;
1138         }
1139     }
1140 
1141     @Override
1142     public void moveToCurrentRow() throws SQLException {
1143         try {
1144             resultSet.moveToCurrentRow();
1145         } catch (final SQLException e) {
1146             handleException(e);
1147         }
1148     }
1149 
1150     @Override
1151     public void moveToInsertRow() throws SQLException {
1152         try {
1153             resultSet.moveToInsertRow();
1154         } catch (final SQLException e) {
1155             handleException(e);
1156         }
1157     }
1158 
1159     @Override
1160     public boolean next() throws SQLException {
1161         try {
1162             return resultSet.next();
1163         } catch (final SQLException e) {
1164             handleException(e);
1165             return false;
1166         }
1167     }
1168 
1169     @Override
1170     public boolean previous() throws SQLException {
1171         try {
1172             return resultSet.previous();
1173         } catch (final SQLException e) {
1174             handleException(e);
1175             return false;
1176         }
1177     }
1178 
1179     @Override
1180     public void refreshRow() throws SQLException {
1181         try {
1182             resultSet.refreshRow();
1183         } catch (final SQLException e) {
1184             handleException(e);
1185         }
1186     }
1187 
1188     @Override
1189     public boolean relative(final int rows) throws SQLException {
1190         try {
1191             return resultSet.relative(rows);
1192         } catch (final SQLException e) {
1193             handleException(e);
1194             return false;
1195         }
1196     }
1197 
1198     @Override
1199     public boolean rowDeleted() throws SQLException {
1200         try {
1201             return resultSet.rowDeleted();
1202         } catch (final SQLException e) {
1203             handleException(e);
1204             return false;
1205         }
1206     }
1207 
1208     @Override
1209     public boolean rowInserted() throws SQLException {
1210         try {
1211             return resultSet.rowInserted();
1212         } catch (final SQLException e) {
1213             handleException(e);
1214             return false;
1215         }
1216     }
1217 
1218     @Override
1219     public boolean rowUpdated() throws SQLException {
1220         try {
1221             return resultSet.rowUpdated();
1222         } catch (final SQLException e) {
1223             handleException(e);
1224             return false;
1225         }
1226     }
1227 
1228     @Override
1229     public void setFetchDirection(final int direction) throws SQLException {
1230         try {
1231             resultSet.setFetchDirection(direction);
1232         } catch (final SQLException e) {
1233             handleException(e);
1234         }
1235     }
1236 
1237     @Override
1238     public void setFetchSize(final int rows) throws SQLException {
1239         try {
1240             resultSet.setFetchSize(rows);
1241         } catch (final SQLException e) {
1242             handleException(e);
1243         }
1244     }
1245 
1246     @Override
1247     public synchronized String toString() {
1248         return super.toString() + "[resultSet=" + resultSet + ", statement=" + statement + ", connection=" + connection + "]";
1249     }
1250 
1251     @Override
1252     public <T> T unwrap(final Class<T> iface) throws SQLException {
1253         if (iface.isAssignableFrom(getClass())) {
1254             return iface.cast(this);
1255         }
1256         if (iface.isAssignableFrom(resultSet.getClass())) {
1257             return iface.cast(resultSet);
1258         }
1259         return resultSet.unwrap(iface);
1260     }
1261 
1262     @Override
1263     public void updateArray(final int columnIndex, final Array x) throws SQLException {
1264         try {
1265             resultSet.updateArray(columnIndex, x);
1266         } catch (final SQLException e) {
1267             handleException(e);
1268         }
1269     }
1270 
1271     @Override
1272     public void updateArray(final String columnName, final Array x) throws SQLException {
1273         try {
1274             resultSet.updateArray(columnName, x);
1275         } catch (final SQLException e) {
1276             handleException(e);
1277         }
1278     }
1279 
1280     @Override
1281     public void updateAsciiStream(final int columnIndex, final InputStream inputStream) throws SQLException {
1282         try {
1283             resultSet.updateAsciiStream(columnIndex, inputStream);
1284         } catch (final SQLException e) {
1285             handleException(e);
1286         }
1287     }
1288 
1289     @Override
1290     public void updateAsciiStream(final int columnIndex, final InputStream x, final int length) throws SQLException {
1291         try {
1292             resultSet.updateAsciiStream(columnIndex, x, length);
1293         } catch (final SQLException e) {
1294             handleException(e);
1295         }
1296     }
1297 
1298     @Override
1299     public void updateAsciiStream(final int columnIndex, final InputStream inputStream, final long length)
1300             throws SQLException {
1301         try {
1302             resultSet.updateAsciiStream(columnIndex, inputStream, length);
1303         } catch (final SQLException e) {
1304             handleException(e);
1305         }
1306     }
1307 
1308     @Override
1309     public void updateAsciiStream(final String columnLabel, final InputStream inputStream) throws SQLException {
1310         try {
1311             resultSet.updateAsciiStream(columnLabel, inputStream);
1312         } catch (final SQLException e) {
1313             handleException(e);
1314         }
1315     }
1316 
1317     @Override
1318     public void updateAsciiStream(final String columnName, final InputStream x, final int length) throws SQLException {
1319         try {
1320             resultSet.updateAsciiStream(columnName, x, length);
1321         } catch (final SQLException e) {
1322             handleException(e);
1323         }
1324     }
1325 
1326     @Override
1327     public void updateAsciiStream(final String columnLabel, final InputStream inputStream, final long length)
1328             throws SQLException {
1329         try {
1330             resultSet.updateAsciiStream(columnLabel, inputStream, length);
1331         } catch (final SQLException e) {
1332             handleException(e);
1333         }
1334     }
1335 
1336     @Override
1337     public void updateBigDecimal(final int columnIndex, final BigDecimal x) throws SQLException {
1338         try {
1339             resultSet.updateBigDecimal(columnIndex, x);
1340         } catch (final SQLException e) {
1341             handleException(e);
1342         }
1343     }
1344 
1345     @Override
1346     public void updateBigDecimal(final String columnName, final BigDecimal x) throws SQLException {
1347         try {
1348             resultSet.updateBigDecimal(columnName, x);
1349         } catch (final SQLException e) {
1350             handleException(e);
1351         }
1352     }
1353 
1354     @Override
1355     public void updateBinaryStream(final int columnIndex, final InputStream inputStream) throws SQLException {
1356         try {
1357             resultSet.updateBinaryStream(columnIndex, inputStream);
1358         } catch (final SQLException e) {
1359             handleException(e);
1360         }
1361     }
1362 
1363     @Override
1364     public void updateBinaryStream(final int columnIndex, final InputStream x, final int length) throws SQLException {
1365         try {
1366             resultSet.updateBinaryStream(columnIndex, x, length);
1367         } catch (final SQLException e) {
1368             handleException(e);
1369         }
1370     }
1371 
1372     @Override
1373     public void updateBinaryStream(final int columnIndex, final InputStream inputStream, final long length)
1374             throws SQLException {
1375         try {
1376             resultSet.updateBinaryStream(columnIndex, inputStream, length);
1377         } catch (final SQLException e) {
1378             handleException(e);
1379         }
1380     }
1381 
1382     @Override
1383     public void updateBinaryStream(final String columnLabel, final InputStream inputStream) throws SQLException {
1384         try {
1385             resultSet.updateBinaryStream(columnLabel, inputStream);
1386         } catch (final SQLException e) {
1387             handleException(e);
1388         }
1389     }
1390 
1391     @Override
1392     public void updateBinaryStream(final String columnName, final InputStream x, final int length) throws SQLException {
1393         try {
1394             resultSet.updateBinaryStream(columnName, x, length);
1395         } catch (final SQLException e) {
1396             handleException(e);
1397         }
1398     }
1399 
1400     @Override
1401     public void updateBinaryStream(final String columnLabel, final InputStream inputStream, final long length)
1402             throws SQLException {
1403         try {
1404             resultSet.updateBinaryStream(columnLabel, inputStream, length);
1405         } catch (final SQLException e) {
1406             handleException(e);
1407         }
1408     }
1409 
1410     @Override
1411     public void updateBlob(final int columnIndex, final Blob x) throws SQLException {
1412         try {
1413             resultSet.updateBlob(columnIndex, x);
1414         } catch (final SQLException e) {
1415             handleException(e);
1416         }
1417     }
1418 
1419     @Override
1420     public void updateBlob(final int columnIndex, final InputStream inputStream) throws SQLException {
1421         try {
1422             resultSet.updateBlob(columnIndex, inputStream);
1423         } catch (final SQLException e) {
1424             handleException(e);
1425         }
1426     }
1427 
1428     @Override
1429     public void updateBlob(final int columnIndex, final InputStream inputStream, final long length)
1430             throws SQLException {
1431         try {
1432             resultSet.updateBlob(columnIndex, inputStream, length);
1433         } catch (final SQLException e) {
1434             handleException(e);
1435         }
1436     }
1437 
1438     @Override
1439     public void updateBlob(final String columnName, final Blob x) throws SQLException {
1440         try {
1441             resultSet.updateBlob(columnName, x);
1442         } catch (final SQLException e) {
1443             handleException(e);
1444         }
1445     }
1446 
1447     @Override
1448     public void updateBlob(final String columnLabel, final InputStream inputStream) throws SQLException {
1449         try {
1450             resultSet.updateBlob(columnLabel, inputStream);
1451         } catch (final SQLException e) {
1452             handleException(e);
1453         }
1454     }
1455 
1456     @Override
1457     public void updateBlob(final String columnLabel, final InputStream inputStream, final long length)
1458             throws SQLException {
1459         try {
1460             resultSet.updateBlob(columnLabel, inputStream, length);
1461         } catch (final SQLException e) {
1462             handleException(e);
1463         }
1464     }
1465 
1466     @Override
1467     public void updateBoolean(final int columnIndex, final boolean x) throws SQLException {
1468         try {
1469             resultSet.updateBoolean(columnIndex, x);
1470         } catch (final SQLException e) {
1471             handleException(e);
1472         }
1473     }
1474 
1475     @Override
1476     public void updateBoolean(final String columnName, final boolean x) throws SQLException {
1477         try {
1478             resultSet.updateBoolean(columnName, x);
1479         } catch (final SQLException e) {
1480             handleException(e);
1481         }
1482     }
1483 
1484     @Override
1485     public void updateByte(final int columnIndex, final byte x) throws SQLException {
1486         try {
1487             resultSet.updateByte(columnIndex, x);
1488         } catch (final SQLException e) {
1489             handleException(e);
1490         }
1491     }
1492 
1493     @Override
1494     public void updateByte(final String columnName, final byte x) throws SQLException {
1495         try {
1496             resultSet.updateByte(columnName, x);
1497         } catch (final SQLException e) {
1498             handleException(e);
1499         }
1500     }
1501 
1502     @Override
1503     public void updateBytes(final int columnIndex, final byte[] x) throws SQLException {
1504         try {
1505             resultSet.updateBytes(columnIndex, x);
1506         } catch (final SQLException e) {
1507             handleException(e);
1508         }
1509     }
1510 
1511     @Override
1512     public void updateBytes(final String columnName, final byte[] x) throws SQLException {
1513         try {
1514             resultSet.updateBytes(columnName, x);
1515         } catch (final SQLException e) {
1516             handleException(e);
1517         }
1518     }
1519 
1520     @Override
1521     public void updateCharacterStream(final int columnIndex, final Reader reader) throws SQLException {
1522         try {
1523             resultSet.updateCharacterStream(columnIndex, reader);
1524         } catch (final SQLException e) {
1525             handleException(e);
1526         }
1527     }
1528 
1529     @Override
1530     public void updateCharacterStream(final int columnIndex, final Reader x, final int length) throws SQLException {
1531         try {
1532             resultSet.updateCharacterStream(columnIndex, x, length);
1533         } catch (final SQLException e) {
1534             handleException(e);
1535         }
1536     }
1537 
1538     @Override
1539     public void updateCharacterStream(final int columnIndex, final Reader reader, final long length)
1540             throws SQLException {
1541         try {
1542             resultSet.updateCharacterStream(columnIndex, reader, length);
1543         } catch (final SQLException e) {
1544             handleException(e);
1545         }
1546     }
1547 
1548     @Override
1549     public void updateCharacterStream(final String columnLabel, final Reader reader) throws SQLException {
1550         try {
1551             resultSet.updateCharacterStream(columnLabel, reader);
1552         } catch (final SQLException e) {
1553             handleException(e);
1554         }
1555     }
1556 
1557     @Override
1558     public void updateCharacterStream(final String columnName, final Reader reader, final int length)
1559             throws SQLException {
1560         try {
1561             resultSet.updateCharacterStream(columnName, reader, length);
1562         } catch (final SQLException e) {
1563             handleException(e);
1564         }
1565     }
1566 
1567     @Override
1568     public void updateCharacterStream(final String columnLabel, final Reader reader, final long length)
1569             throws SQLException {
1570         try {
1571             resultSet.updateCharacterStream(columnLabel, reader, length);
1572         } catch (final SQLException e) {
1573             handleException(e);
1574         }
1575     }
1576 
1577     @Override
1578     public void updateClob(final int columnIndex, final Clob x) throws SQLException {
1579         try {
1580             resultSet.updateClob(columnIndex, x);
1581         } catch (final SQLException e) {
1582             handleException(e);
1583         }
1584     }
1585 
1586     @Override
1587     public void updateClob(final int columnIndex, final Reader reader) throws SQLException {
1588         try {
1589             resultSet.updateClob(columnIndex, reader);
1590         } catch (final SQLException e) {
1591             handleException(e);
1592         }
1593     }
1594 
1595     @Override
1596     public void updateClob(final int columnIndex, final Reader reader, final long length) throws SQLException {
1597         try {
1598             resultSet.updateClob(columnIndex, reader, length);
1599         } catch (final SQLException e) {
1600             handleException(e);
1601         }
1602     }
1603 
1604     @Override
1605     public void updateClob(final String columnName, final Clob x) throws SQLException {
1606         try {
1607             resultSet.updateClob(columnName, x);
1608         } catch (final SQLException e) {
1609             handleException(e);
1610         }
1611     }
1612 
1613     @Override
1614     public void updateClob(final String columnLabel, final Reader reader) throws SQLException {
1615         try {
1616             resultSet.updateClob(columnLabel, reader);
1617         } catch (final SQLException e) {
1618             handleException(e);
1619         }
1620     }
1621 
1622     @Override
1623     public void updateClob(final String columnLabel, final Reader reader, final long length) throws SQLException {
1624         try {
1625             resultSet.updateClob(columnLabel, reader, length);
1626         } catch (final SQLException e) {
1627             handleException(e);
1628         }
1629     }
1630 
1631     @Override
1632     public void updateDate(final int columnIndex, final Date x) throws SQLException {
1633         try {
1634             resultSet.updateDate(columnIndex, x);
1635         } catch (final SQLException e) {
1636             handleException(e);
1637         }
1638     }
1639 
1640     @Override
1641     public void updateDate(final String columnName, final Date x) throws SQLException {
1642         try {
1643             resultSet.updateDate(columnName, x);
1644         } catch (final SQLException e) {
1645             handleException(e);
1646         }
1647     }
1648 
1649     @Override
1650     public void updateDouble(final int columnIndex, final double x) throws SQLException {
1651         try {
1652             resultSet.updateDouble(columnIndex, x);
1653         } catch (final SQLException e) {
1654             handleException(e);
1655         }
1656     }
1657 
1658     @Override
1659     public void updateDouble(final String columnName, final double x) throws SQLException {
1660         try {
1661             resultSet.updateDouble(columnName, x);
1662         } catch (final SQLException e) {
1663             handleException(e);
1664         }
1665     }
1666 
1667     @Override
1668     public void updateFloat(final int columnIndex, final float x) throws SQLException {
1669         try {
1670             resultSet.updateFloat(columnIndex, x);
1671         } catch (final SQLException e) {
1672             handleException(e);
1673         }
1674     }
1675 
1676     @Override
1677     public void updateFloat(final String columnName, final float x) throws SQLException {
1678         try {
1679             resultSet.updateFloat(columnName, x);
1680         } catch (final SQLException e) {
1681             handleException(e);
1682         }
1683     }
1684 
1685     @Override
1686     public void updateInt(final int columnIndex, final int x) throws SQLException {
1687         try {
1688             resultSet.updateInt(columnIndex, x);
1689         } catch (final SQLException e) {
1690             handleException(e);
1691         }
1692     }
1693 
1694     @Override
1695     public void updateInt(final String columnName, final int x) throws SQLException {
1696         try {
1697             resultSet.updateInt(columnName, x);
1698         } catch (final SQLException e) {
1699             handleException(e);
1700         }
1701     }
1702 
1703     @Override
1704     public void updateLong(final int columnIndex, final long x) throws SQLException {
1705         try {
1706             resultSet.updateLong(columnIndex, x);
1707         } catch (final SQLException e) {
1708             handleException(e);
1709         }
1710     }
1711 
1712     @Override
1713     public void updateLong(final String columnName, final long x) throws SQLException {
1714         try {
1715             resultSet.updateLong(columnName, x);
1716         } catch (final SQLException e) {
1717             handleException(e);
1718         }
1719     }
1720 
1721     @Override
1722     public void updateNCharacterStream(final int columnIndex, final Reader reader) throws SQLException {
1723         try {
1724             resultSet.updateNCharacterStream(columnIndex, reader);
1725         } catch (final SQLException e) {
1726             handleException(e);
1727         }
1728     }
1729 
1730     @Override
1731     public void updateNCharacterStream(final int columnIndex, final Reader reader, final long length)
1732             throws SQLException {
1733         try {
1734             resultSet.updateNCharacterStream(columnIndex, reader, length);
1735         } catch (final SQLException e) {
1736             handleException(e);
1737         }
1738     }
1739 
1740     @Override
1741     public void updateNCharacterStream(final String columnLabel, final Reader reader) throws SQLException {
1742         try {
1743             resultSet.updateNCharacterStream(columnLabel, reader);
1744         } catch (final SQLException e) {
1745             handleException(e);
1746         }
1747     }
1748 
1749     @Override
1750     public void updateNCharacterStream(final String columnLabel, final Reader reader, final long length)
1751             throws SQLException {
1752         try {
1753             resultSet.updateNCharacterStream(columnLabel, reader, length);
1754         } catch (final SQLException e) {
1755             handleException(e);
1756         }
1757     }
1758 
1759     @Override
1760     public void updateNClob(final int columnIndex, final NClob value) throws SQLException {
1761         try {
1762             resultSet.updateNClob(columnIndex, value);
1763         } catch (final SQLException e) {
1764             handleException(e);
1765         }
1766     }
1767 
1768     @Override
1769     public void updateNClob(final int columnIndex, final Reader reader) throws SQLException {
1770         try {
1771             resultSet.updateNClob(columnIndex, reader);
1772         } catch (final SQLException e) {
1773             handleException(e);
1774         }
1775     }
1776 
1777     @Override
1778     public void updateNClob(final int columnIndex, final Reader reader, final long length) throws SQLException {
1779         try {
1780             resultSet.updateNClob(columnIndex, reader, length);
1781         } catch (final SQLException e) {
1782             handleException(e);
1783         }
1784     }
1785 
1786     @Override
1787     public void updateNClob(final String columnLabel, final NClob value) throws SQLException {
1788         try {
1789             resultSet.updateNClob(columnLabel, value);
1790         } catch (final SQLException e) {
1791             handleException(e);
1792         }
1793     }
1794 
1795     @Override
1796     public void updateNClob(final String columnLabel, final Reader reader) throws SQLException {
1797         try {
1798             resultSet.updateNClob(columnLabel, reader);
1799         } catch (final SQLException e) {
1800             handleException(e);
1801         }
1802     }
1803 
1804     @Override
1805     public void updateNClob(final String columnLabel, final Reader reader, final long length) throws SQLException {
1806         try {
1807             resultSet.updateNClob(columnLabel, reader, length);
1808         } catch (final SQLException e) {
1809             handleException(e);
1810         }
1811     }
1812 
1813     @Override
1814     public void updateNString(final int columnIndex, final String value) throws SQLException {
1815         try {
1816             resultSet.updateNString(columnIndex, value);
1817         } catch (final SQLException e) {
1818             handleException(e);
1819         }
1820     }
1821 
1822     @Override
1823     public void updateNString(final String columnLabel, final String value) throws SQLException {
1824         try {
1825             resultSet.updateNString(columnLabel, value);
1826         } catch (final SQLException e) {
1827             handleException(e);
1828         }
1829     }
1830 
1831     @Override
1832     public void updateNull(final int columnIndex) throws SQLException {
1833         try {
1834             resultSet.updateNull(columnIndex);
1835         } catch (final SQLException e) {
1836             handleException(e);
1837         }
1838     }
1839 
1840     @Override
1841     public void updateNull(final String columnName) throws SQLException {
1842         try {
1843             resultSet.updateNull(columnName);
1844         } catch (final SQLException e) {
1845             handleException(e);
1846         }
1847     }
1848 
1849     @Override
1850     public void updateObject(final int columnIndex, final Object x) throws SQLException {
1851         try {
1852             resultSet.updateObject(columnIndex, x);
1853         } catch (final SQLException e) {
1854             handleException(e);
1855         }
1856     }
1857 
1858     @Override
1859     public void updateObject(final int columnIndex, final Object x, final int scale) throws SQLException {
1860         try {
1861             resultSet.updateObject(columnIndex, x);
1862         } catch (final SQLException e) {
1863             handleException(e);
1864         }
1865     }
1866 
1867     /**
1868      * @since 2.5.0
1869      */
1870     @Override
1871     public void updateObject(final int columnIndex, final Object x, final SQLType targetSqlType) throws SQLException {
1872         try {
1873             resultSet.updateObject(columnIndex, x, targetSqlType);
1874         } catch (final SQLException e) {
1875             handleException(e);
1876         }
1877     }
1878 
1879     /**
1880      * @since 2.5.0
1881      */
1882     @Override
1883     public void updateObject(final int columnIndex, final Object x, final SQLType targetSqlType, final int scaleOrLength) throws SQLException {
1884         try {
1885             resultSet.updateObject(columnIndex, x, targetSqlType, scaleOrLength);
1886         } catch (final SQLException e) {
1887             handleException(e);
1888         }
1889     }
1890 
1891     @Override
1892     public void updateObject(final String columnName, final Object x) throws SQLException {
1893         try {
1894             resultSet.updateObject(columnName, x);
1895         } catch (final SQLException e) {
1896             handleException(e);
1897         }
1898     }
1899 
1900     @Override
1901     public void updateObject(final String columnName, final Object x, final int scale) throws SQLException {
1902         try {
1903             resultSet.updateObject(columnName, x);
1904         } catch (final SQLException e) {
1905             handleException(e);
1906         }
1907     }
1908 
1909     /**
1910      * @since 2.5.0
1911      */
1912     @Override
1913     public void updateObject(final String columnLabel, final Object x, final SQLType targetSqlType) throws SQLException {
1914         try {
1915             resultSet.updateObject(columnLabel, x, targetSqlType);
1916         } catch (final SQLException e) {
1917             handleException(e);
1918         }
1919     }
1920 
1921     /**
1922      * @since 2.5.0
1923      */
1924     @Override
1925     public void updateObject(final String columnLabel, final Object x, final SQLType targetSqlType, final int scaleOrLength)
1926             throws SQLException {
1927         try {
1928             resultSet.updateObject(columnLabel, x, targetSqlType, scaleOrLength);
1929         } catch (final SQLException e) {
1930             handleException(e);
1931         }
1932     }
1933 
1934     @Override
1935     public void updateRef(final int columnIndex, final Ref x) throws SQLException {
1936         try {
1937             resultSet.updateRef(columnIndex, x);
1938         } catch (final SQLException e) {
1939             handleException(e);
1940         }
1941     }
1942 
1943     @Override
1944     public void updateRef(final String columnName, final Ref x) throws SQLException {
1945         try {
1946             resultSet.updateRef(columnName, x);
1947         } catch (final SQLException e) {
1948             handleException(e);
1949         }
1950     }
1951 
1952     @Override
1953     public void updateRow() throws SQLException {
1954         try {
1955             resultSet.updateRow();
1956         } catch (final SQLException e) {
1957             handleException(e);
1958         }
1959     }
1960 
1961     @Override
1962     public void updateRowId(final int columnIndex, final RowId value) throws SQLException {
1963         try {
1964             resultSet.updateRowId(columnIndex, value);
1965         } catch (final SQLException e) {
1966             handleException(e);
1967         }
1968     }
1969 
1970     @Override
1971     public void updateRowId(final String columnLabel, final RowId value) throws SQLException {
1972         try {
1973             resultSet.updateRowId(columnLabel, value);
1974         } catch (final SQLException e) {
1975             handleException(e);
1976         }
1977     }
1978 
1979     @Override
1980     public void updateShort(final int columnIndex, final short x) throws SQLException {
1981         try {
1982             resultSet.updateShort(columnIndex, x);
1983         } catch (final SQLException e) {
1984             handleException(e);
1985         }
1986     }
1987 
1988     @Override
1989     public void updateShort(final String columnName, final short x) throws SQLException {
1990         try {
1991             resultSet.updateShort(columnName, x);
1992         } catch (final SQLException e) {
1993             handleException(e);
1994         }
1995     }
1996 
1997     @Override
1998     public void updateSQLXML(final int columnIndex, final SQLXML value) throws SQLException {
1999         try {
2000             resultSet.updateSQLXML(columnIndex, value);
2001         } catch (final SQLException e) {
2002             handleException(e);
2003         }
2004     }
2005 
2006     @Override
2007     public void updateSQLXML(final String columnLabel, final SQLXML value) throws SQLException {
2008         try {
2009             resultSet.updateSQLXML(columnLabel, value);
2010         } catch (final SQLException e) {
2011             handleException(e);
2012         }
2013     }
2014 
2015     @Override
2016     public void updateString(final int columnIndex, final String x) throws SQLException {
2017         try {
2018             resultSet.updateString(columnIndex, x);
2019         } catch (final SQLException e) {
2020             handleException(e);
2021         }
2022     }
2023 
2024     @Override
2025     public void updateString(final String columnName, final String x) throws SQLException {
2026         try {
2027             resultSet.updateString(columnName, x);
2028         } catch (final SQLException e) {
2029             handleException(e);
2030         }
2031     }
2032 
2033     @Override
2034     public void updateTime(final int columnIndex, final Time x) throws SQLException {
2035         try {
2036             resultSet.updateTime(columnIndex, x);
2037         } catch (final SQLException e) {
2038             handleException(e);
2039         }
2040     }
2041 
2042     @Override
2043     public void updateTime(final String columnName, final Time x) throws SQLException {
2044         try {
2045             resultSet.updateTime(columnName, x);
2046         } catch (final SQLException e) {
2047             handleException(e);
2048         }
2049     }
2050 
2051     @Override
2052     public void updateTimestamp(final int columnIndex, final Timestamp x) throws SQLException {
2053         try {
2054             resultSet.updateTimestamp(columnIndex, x);
2055         } catch (final SQLException e) {
2056             handleException(e);
2057         }
2058     }
2059 
2060     @Override
2061     public void updateTimestamp(final String columnName, final Timestamp x) throws SQLException {
2062         try {
2063             resultSet.updateTimestamp(columnName, x);
2064         } catch (final SQLException e) {
2065             handleException(e);
2066         }
2067     }
2068 
2069     @Override
2070     public boolean wasNull() throws SQLException {
2071         try {
2072             return resultSet.wasNull();
2073         } catch (final SQLException e) {
2074             handleException(e);
2075             return false;
2076         }
2077     }
2078 }