org.springframework.batch.item.database

## Class StoredProcedureItemReader<T>

- java.lang.Object
- - org.springframework.batch.item.ItemStreamSupport
  - - org.springframework.batch.item.support.AbstractItemStreamItemReader<T>
    - - org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader<T>
      - - org.springframework.batch.item.database.AbstractCursorItemReader<T>
        - - org.springframework.batch.item.database.StoredProcedureItemReader<T>

- All Implemented Interfaces:
    ItemReader<T>, ItemStream, ItemStreamReader<T>, org.springframework.beans.factory.InitializingBean

      public class StoredProcedureItemReader<T>
      extends AbstractCursorItemReader<T>

  Item reader implementation that executes a stored procedure and then reads the returned cursor and continually retrieves the next row in the `ResultSet`.

  The callable statement used to open the cursor is created with the 'READ_ONLY' option as well as with the 'TYPE_FORWARD_ONLY' option. By default the cursor will be opened using a separate connection which means that it will not participate in any transactions created as part of the step processing.

  Each call to `AbstractItemCountingItemStreamItemReader.read()` will call the provided RowMapper, passing in the ResultSet.

  This class is modeled after the similar `JdbcCursorItemReader` class.

  Author:
    Thomas Risberg, Mahmoud Ben Hassine

- - ### Field Summary

    - ### Fields inherited from class org.springframework.batch.item.database.AbstractCursorItemReader

      `log, rs, VALUE_NOT_SET`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `StoredProcedureItemReader()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Assert that mandatory properties are set.
    `protected void` | `cleanupOnClose()` Deprecated. This method is deprecated in favor of `cleanupOnClose(java.sql.Connection)` and will be removed in a future release
    `protected void` | `cleanupOnClose(java.sql.Connection connection)` Close the cursor and database connection.
    `java.lang.String` | `getSql()`
    `protected void` | `openCursor(java.sql.Connection con)`
    `protected T` | `readCursor(java.sql.ResultSet rs, int currentRow)` Read the cursor and map to the type of object this reader should return.
    `void` | `setFunction(boolean function)` Set whether this stored procedure is a function.
    `void` | `setParameters(org.springframework.jdbc.core.SqlParameter[] parameters)` Add one or more declared parameters.
    `void` | `setPreparedStatementSetter(org.springframework.jdbc.core.PreparedStatementSetter preparedStatementSetter)` Set the PreparedStatementSetter to use if any parameter values that need to be set in the supplied query.
    `void` | `setProcedureName(java.lang.String sprocedureName)` Set the SQL statement to be used when creating the cursor.
    `void` | `setRefCursorPosition(int refCursorPosition)` Set the parameter position of the REF CURSOR.
    `void` | `setRowMapper(org.springframework.jdbc.core.RowMapper<T> rowMapper)` Set the RowMapper to be used for all calls to read().

    - ### Methods inherited from class org.springframework.batch.item.database.AbstractCursorItemReader

      `applyStatementSettings, doClose, doOpen, doRead, getDataSource, getExceptionTranslator, handleWarnings, initializeConnection, isUseSharedExtendedConnection, jumpToItem, setConnectionAutoCommit, setDataSource, setDriverSupportsAbsolute, setFetchSize, setIgnoreWarnings, setMaxRows, setQueryTimeout, setUseSharedExtendedConnection, setVerifyCursorPosition`

    - ### Methods inherited from class org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader

      `close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, update`

    - ### Methods inherited from class org.springframework.batch.item.ItemStreamSupport

      `getExecutionContextKey, setExecutionContextName, setName`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### StoredProcedureItemReader

          public StoredProcedureItemReader()

  - ### Method Detail

    - #### setRowMapper

          public void setRowMapper(org.springframework.jdbc.core.RowMapper<T> rowMapper)

      Set the RowMapper to be used for all calls to read().
      Parameters:
        `rowMapper` - the RowMapper to use to map the results

    - #### setProcedureName

          public void setProcedureName(java.lang.String sprocedureName)

      Set the SQL statement to be used when creating the cursor. This statement should be a complete and valid SQL statement, as it will be run directly without any modification.
      Parameters:
        `sprocedureName` - the SQL used to call the statement

    - #### setPreparedStatementSetter

          public void setPreparedStatementSetter(org.springframework.jdbc.core.PreparedStatementSetter preparedStatementSetter)

      Set the PreparedStatementSetter to use if any parameter values that need to be set in the supplied query.
      Parameters:
        `preparedStatementSetter` - used to populate the SQL

    - #### setParameters

          public void setParameters(org.springframework.jdbc.core.SqlParameter[] parameters)

      Add one or more declared parameters. Used for configuring this operation when used in a bean factory. Each parameter will specify SQL type and (optionally) the parameter's name.
      Parameters:
        `parameters` - Array containing the declared `SqlParameter` objects

    - #### setFunction

          public void setFunction(boolean function)

      Set whether this stored procedure is a function.
      Parameters:
        `function` - indicator

    - #### setRefCursorPosition

          public void setRefCursorPosition(int refCursorPosition)

      Set the parameter position of the REF CURSOR. Only used for Oracle and PostgreSQL that use REF CURSORs. For any other database this should be kept as 0 which is the default.
      Parameters:
        `refCursorPosition` - The parameter position of the REF CURSOR

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws java.lang.Exception

      Assert that mandatory properties are set.
      Specified by:
        `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
      Overrides:
        `afterPropertiesSet` in class `AbstractCursorItemReader<T>`
      Throws:
        `java.lang.IllegalArgumentException` - if either data source or SQL properties not set.
        `java.lang.Exception`

    - #### openCursor

          protected void openCursor(java.sql.Connection con)

      Specified by:
        `openCursor` in class `AbstractCursorItemReader<T>`

    - #### readCursor

          @Nullable
          protected T readCursor(java.sql.ResultSet rs,
                                           int currentRow)
                                    throws java.sql.SQLException

      Description copied from class: `AbstractCursorItemReader`
      Read the cursor and map to the type of object this reader should return. This method must be overridden by subclasses.
      Specified by:
        `readCursor` in class `AbstractCursorItemReader<T>`
      Parameters:
        `rs` - The current result set
        `currentRow` - Current position of the result set
      Returns:
        the mapped object at the cursor position
      Throws:
        `java.sql.SQLException` - if interactions with the current result set fail

    - #### cleanupOnClose

          @Deprecated
          protected void cleanupOnClose()
                                             throws java.lang.Exception

      Deprecated. This method is deprecated in favor of `cleanupOnClose(java.sql.Connection)` and will be removed in a future release
      Close the cursor and database connection.
      Specified by:
        `cleanupOnClose` in class `AbstractCursorItemReader<T>`
      Throws:
        `java.lang.Exception` - If unable to clean up resources

    - #### cleanupOnClose

          protected void cleanupOnClose(java.sql.Connection connection)
                                 throws java.lang.Exception

      Close the cursor and database connection.
      Specified by:
        `cleanupOnClose` in class `AbstractCursorItemReader<T>`
      Parameters:
        `connection` - to the database
      Throws:
        `java.lang.Exception` - If unable to clean up resources

    - #### getSql

          public java.lang.String getSql()

      Specified by:
        `getSql` in class `AbstractCursorItemReader<T>`