diff --git a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java index 31d4413920..5501bde93c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java @@ -1595,6 +1595,7 @@ final class CursorImpl implements Cursor { ctx.record(record); listener.recordStart(ctx); + try { @@ -1621,6 +1622,11 @@ final class CursorImpl implements Cursor { if (intern[i]) record.intern0(i); + } + catch (Exception e) { + e.printStackTrace(); + throw e; + } ctx.record(record); listener.recordEnd(ctx); @@ -1632,24 +1638,31 @@ final class CursorImpl implements Cursor { */ @SuppressWarnings("unchecked") private final void setValue(AbstractRecord record, Field field, int index) throws SQLException { - T value; + try { + T value; - if (field instanceof RowField) { - Field[] emulatedFields = ((RowField) field).emulatedFields(); + if (field instanceof RowField) { + Field[] emulatedFields = ((RowField) field).emulatedFields(); - value = (T) Tools.newRecord(true, RecordImpl.class, emulatedFields, ctx.configuration()) - .operate(new CursorRecordInitialiser(emulatedFields, offset + index)); + value = (T) Tools.newRecord(true, RecordImpl.class, emulatedFields, ctx.configuration()) + .operate(new CursorRecordInitialiser(emulatedFields, offset + index)); - offset += emulatedFields.length - 1; - } - else { - rsContext.index(offset + index + 1); - field.getBinding().get((BindingGetResultSetContext) rsContext); - value = (T) rsContext.value(); + offset += emulatedFields.length - 1; + } + else { + rsContext.index(offset + index + 1); + field.getBinding().get((BindingGetResultSetContext) rsContext); + value = (T) rsContext.value(); + } + + record.values[index] = value; + record.originals[index] = value; } - record.values[index] = value; - record.originals[index] = value; + // [#5901] Improved error logging, mostly useful when there are some data type conversion errors + catch (Exception e) { + throw new SQLException("Error while reading field: " + field + ", at JDBC index: " + (offset + index + 1), e); + } } } } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java index 4f0c85c505..923b136d13 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBindContext.java @@ -53,9 +53,16 @@ final class DefaultBindContext extends AbstractBindContext { @Override @SuppressWarnings({ "unchecked" }) protected final BindContext bindValue0(Object value, Field field) throws SQLException { - ((Field) field).getBinding().set( - new DefaultBindingSetStatementContext(configuration(), data(), stmt, nextIndex(), value) - ); + int nextIndex = nextIndex(); + + try { + ((Field) field).getBinding().set( + new DefaultBindingSetStatementContext(configuration(), data(), stmt, nextIndex, value) + ); + } + catch (Exception e) { + throw new SQLException("Error while writing value at JDBC bind index: " + nextIndex ,e); + } return this; }