code: public void setCharacterStream(final int parameterIndex, final Reader reader, final long length) throws SQLException {
          if(reader == null) {
              setNull(parameterIndex, Types.BLOB);
              return;
          }
  
          try {
              setParameter(parameterIndex, new ReaderParameter(reader, length));
          } catch (IOException e) {
              throw SQLExceptionMapper.getSQLException("Could not read stream: " + e.getMessage(), e);
          }
      }
docs: Sets the designated parameter to the given <code>Reader</code> object, which is the given number of characters
  long. When a very large UNICODE value is input to a <code>LONGVARCHAR</code> parameter, it may be more practical
  to send it via a <code>java.io.Reader</code> object. The data will be read from the stream as needed until
  end-of-file is reached.  The JDBC driver will do any necessary conversion from UNICODE to the database char
  format.
  <p/>
  <P><B>Note:</B> This stream object can either be a standard Java stream object or your own subclass that
  implements the standard interface.
  
  @param parameterIndex the first parameter is 1, the second is 2, ...
  @param reader         the <code>java.io.Reader</code> object that contains the Unicode data
  @param length         the number of characters in the stream
  @throws java.sql.SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement;
  if a database access error occurs or this method is called on a closed
  <code>PreparedStatement</code>
  @since 1.6