001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      https://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.commons.dbcp2;
018
019import java.io.InputStream;
020import java.io.Reader;
021import java.math.BigDecimal;
022import java.sql.Array;
023import java.sql.Blob;
024import java.sql.Clob;
025import java.sql.Connection;
026import java.sql.Date;
027import java.sql.NClob;
028import java.sql.Ref;
029import java.sql.ResultSet;
030import java.sql.ResultSetMetaData;
031import java.sql.RowId;
032import java.sql.SQLException;
033import java.sql.SQLType;
034import java.sql.SQLWarning;
035import java.sql.SQLXML;
036import java.sql.Statement;
037import java.sql.Time;
038import java.sql.Timestamp;
039import java.util.Calendar;
040import java.util.Map;
041
042/**
043 * A base delegating implementation of {@link ResultSet}.
044 * <p>
045 * All of the methods from the {@link ResultSet} interface simply call the corresponding method on the "delegate"
046 * provided in my constructor.
047 * </p>
048 * <p>
049 * Extends AbandonedTrace to implement result set tracking and logging of code which created the ResultSet. Tracking the
050 * ResultSet ensures that the Statement which created it can close any open ResultSet's on Statement close.
051 * </p>
052 *
053 * @since 2.0
054 */
055public final class DelegatingResultSet extends AbandonedTrace implements ResultSet {
056
057    /**
058     * Wraps the given result set in a delegate.
059     *
060     * @param connection
061     *            The Connection which created the ResultSet.
062     * @param resultSet
063     *            The ResultSet to wrap.
064     * @return a new delegate.
065     */
066    public static ResultSet wrapResultSet(final Connection connection, final ResultSet resultSet) {
067        if (null == resultSet) {
068            return null;
069        }
070        return new DelegatingResultSet(connection, resultSet);
071    }
072
073    /**
074     * Wraps the given result set in a delegate.
075     *
076     * @param statement
077     *            The Statement which created the ResultSet.
078     * @param resultSet
079     *            The ResultSet to wrap.
080     * @return a new delegate.
081     */
082    public static ResultSet wrapResultSet(final Statement statement, final ResultSet resultSet) {
083        if (null == resultSet) {
084            return null;
085        }
086        return new DelegatingResultSet(statement, resultSet);
087    }
088
089    /** My delegate. **/
090    private final ResultSet resultSet;
091
092    /** The Statement that created me, if any. **/
093    private Statement statement;
094
095    /** The Connection that created me, if any. **/
096    private Connection connection;
097
098    /**
099     * 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}