package dbfit.fixture; import java.sql.*; public class StatementExecutionCapturingResultSetValue extends StatementExecution { private Object returnValue = null; private int returnValueInd = -1; public StatementExecutionCapturingResultSetValue(PreparedStatement statement) { super(statement); } @Override public void run() throws SQLException { try (ResultSet rs = statement.executeQuery()) { rs.next(); returnValue = rs.getObject(1); } } @Override public void registerOutParameter(int index, int sqlType, boolean isReturnValue) throws SQLException { if (isReturnValue) { returnValueInd = index; } else { convertStatementToCallable().registerOutParameter(getRealIndex(index), sqlType); } } @Override public void setObject(int index, Object value, int sqlType, String userDefinedTypeName) throws SQLException { super.setObject(getRealIndex(index), value, sqlType, userDefinedTypeName); } @Override public Object getObject(int index) throws SQLException { if (returnValueInd == index) { return returnValue; } else { return super.getObject(getRealIndex(index)); } } private int getRealIndex(int index) { return index - 1; // Ignore the "?" for the return value } }