code: public void setCharacterStream(final int parameterIndex, final Reader reader) throws SQLException {
          if(reader == null) {
              setNull(parameterIndex, Types.BLOB);
              return;
          }
  
  
          try {
              setParameter(parameterIndex, new BufferedReaderParameter(reader));
          } catch (IOException e) {
              throw SQLExceptionMapper.getSQLException("Could not read reader", e);
          }
      }
docs: Sets the designated parameter to the given <code>Reader</code> object. 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. <P><B>Note:</B> Consult your JDBC driver documentation to determine if it
  might be more efficient to use a version of <code>setCharacterStream</code> which takes a length parameter.
  
  @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
  @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>
  @throws java.sql.SQLFeatureNotSupportedException
  if the JDBC driver does not support this method
  @since 1.6