org.springframework.jdbc.support.lob

Interface LobCreator

  • All Superinterfaces:
    java.lang.AutoCloseable, java.io.Closeable
    All Known Implementing Classes:
    DefaultLobHandler.DefaultLobCreator, TemporaryLobCreator


    public interface LobCreator
    extends java.io.Closeable
    Interface that abstracts potentially database-specific creation of large binary fields and large text fields. Does not work with java.sql.Blob and java.sql.Clob instances in the API, as some JDBC drivers do not support these types as such.

    The LOB creation part is where LobHandler implementations usually differ. Possible strategies include usage of PreparedStatement.setBinaryStream/setCharacterStream but also PreparedStatement.setBlob/setClob with either a stream argument (requires JDBC 4.0) or java.sql.Blob/Clob wrapper objects.

    A LobCreator represents a session for creating BLOBs: It is not thread-safe and needs to be instantiated for each statement execution or for each transaction. Each LobCreator needs to be closed after completion.

    For convenient working with a PreparedStatement and a LobCreator, consider using JdbcTemplate with an AbstractLobCreatingPreparedStatementCallback implementation. See the latter's javadoc for details.

    Since:
    04.12.2003
    Author:
    Juergen Hoeller
    See Also:
    close(), LobHandler.getLobCreator(), DefaultLobHandler.DefaultLobCreator, PreparedStatement.setBlob(int, java.sql.Blob), PreparedStatement.setClob(int, java.sql.Clob), PreparedStatement.setBytes(int, byte[]), PreparedStatement.setBinaryStream(int, java.io.InputStream, int), PreparedStatement.setString(int, java.lang.String), PreparedStatement.setAsciiStream(int, java.io.InputStream, int), PreparedStatement.setCharacterStream(int, java.io.Reader, int)
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method and Description
      void close()
      Close this LobCreator session and free its temporarily created BLOBs and CLOBs.
      void setBlobAsBinaryStream(java.sql.PreparedStatement ps, int paramIndex, java.io.InputStream contentStream, int contentLength)
      Set the given content as binary stream on the given statement, using the given parameter index.
      void setBlobAsBytes(java.sql.PreparedStatement ps, int paramIndex, byte[] content)
      Set the given content as bytes on the given statement, using the given parameter index.
      void setClobAsAsciiStream(java.sql.PreparedStatement ps, int paramIndex, java.io.InputStream asciiStream, int contentLength)
      Set the given content as ASCII stream on the given statement, using the given parameter index.
      void setClobAsCharacterStream(java.sql.PreparedStatement ps, int paramIndex, java.io.Reader characterStream, int contentLength)
      Set the given content as character stream on the given statement, using the given parameter index.
      void setClobAsString(java.sql.PreparedStatement ps, int paramIndex, java.lang.String content)
      Set the given content as String on the given statement, using the given parameter index.
    • Method Detail

      • setBlobAsBytes

        void setBlobAsBytes(java.sql.PreparedStatement ps,
                            int paramIndex,
                            @Nullable
                            byte[] content)
                     throws java.sql.SQLException
        Set the given content as bytes on the given statement, using the given parameter index. Might simply invoke PreparedStatement.setBytes or create a Blob instance for it, depending on the database and driver.
        Parameters:
        ps - the PreparedStatement to the set the content on
        paramIndex - the parameter index to use
        content - the content as byte array, or null for SQL NULL
        Throws:
        java.sql.SQLException - if thrown by JDBC methods
        See Also:
        PreparedStatement.setBytes(int, byte[])
      • setBlobAsBinaryStream

        void setBlobAsBinaryStream(java.sql.PreparedStatement ps,
                                   int paramIndex,
                                   @Nullable
                                   java.io.InputStream contentStream,
                                   int contentLength)
                            throws java.sql.SQLException
        Set the given content as binary stream on the given statement, using the given parameter index. Might simply invoke PreparedStatement.setBinaryStream or create a Blob instance for it, depending on the database and driver.
        Parameters:
        ps - the PreparedStatement to the set the content on
        paramIndex - the parameter index to use
        contentStream - the content as binary stream, or null for SQL NULL
        Throws:
        java.sql.SQLException - if thrown by JDBC methods
        See Also:
        PreparedStatement.setBinaryStream(int, java.io.InputStream, int)
      • setClobAsString

        void setClobAsString(java.sql.PreparedStatement ps,
                             int paramIndex,
                             @Nullable
                             java.lang.String content)
                      throws java.sql.SQLException
        Set the given content as String on the given statement, using the given parameter index. Might simply invoke PreparedStatement.setString or create a Clob instance for it, depending on the database and driver.
        Parameters:
        ps - the PreparedStatement to the set the content on
        paramIndex - the parameter index to use
        content - the content as String, or null for SQL NULL
        Throws:
        java.sql.SQLException - if thrown by JDBC methods
        See Also:
        PreparedStatement.setBytes(int, byte[])
      • setClobAsAsciiStream

        void setClobAsAsciiStream(java.sql.PreparedStatement ps,
                                  int paramIndex,
                                  @Nullable
                                  java.io.InputStream asciiStream,
                                  int contentLength)
                           throws java.sql.SQLException
        Set the given content as ASCII stream on the given statement, using the given parameter index. Might simply invoke PreparedStatement.setAsciiStream or create a Clob instance for it, depending on the database and driver.
        Parameters:
        ps - the PreparedStatement to the set the content on
        paramIndex - the parameter index to use
        asciiStream - the content as ASCII stream, or null for SQL NULL
        Throws:
        java.sql.SQLException - if thrown by JDBC methods
        See Also:
        PreparedStatement.setAsciiStream(int, java.io.InputStream, int)
      • setClobAsCharacterStream

        void setClobAsCharacterStream(java.sql.PreparedStatement ps,
                                      int paramIndex,
                                      @Nullable
                                      java.io.Reader characterStream,
                                      int contentLength)
                               throws java.sql.SQLException
        Set the given content as character stream on the given statement, using the given parameter index. Might simply invoke PreparedStatement.setCharacterStream or create a Clob instance for it, depending on the database and driver.
        Parameters:
        ps - the PreparedStatement to the set the content on
        paramIndex - the parameter index to use
        characterStream - the content as character stream, or null for SQL NULL
        Throws:
        java.sql.SQLException - if thrown by JDBC methods
        See Also:
        PreparedStatement.setCharacterStream(int, java.io.Reader, int)
      • close

        void close()
        Close this LobCreator session and free its temporarily created BLOBs and CLOBs. Will not need to do anything if using PreparedStatement's standard methods, but might be necessary to free database resources if using proprietary means.

        NOTE: Needs to be invoked after the involved PreparedStatements have been executed or the affected O/R mapping sessions have been flushed. Otherwise, the database resources for the temporary BLOBs might stay allocated.

        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable