org.springframework.jdbc.datasource.init

Class ScriptUtils

  • java.lang.Object
    • org.springframework.jdbc.datasource.init.ScriptUtils


  • public abstract class ScriptUtils
    extends java.lang.Object
    Generic utility methods for working with SQL scripts.

    Mainly for internal use within the framework.

    Since:
    4.0.3
    Author:
    Thomas Risberg, Sam Brannen, Juergen Hoeller, Keith Donald, Dave Syer, Chris Beams, Oliver Gierke, Chris Baldwin, Nicolas Debeissat
    • Constructor Summary

      Constructors 
      Constructor and Description
      ScriptUtils() 
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method and Description
      static boolean containsSqlScriptDelimiters(java.lang.String script, java.lang.String delim)
      Does the provided SQL script contain the specified delimiter?
      static void executeSqlScript(java.sql.Connection connection, EncodedResource resource)
      Execute the given SQL script using default settings for statement separators, comment delimiters, and exception handling flags.
      static void executeSqlScript(java.sql.Connection connection, EncodedResource resource, boolean continueOnError, boolean ignoreFailedDrops, java.lang.String commentPrefix, java.lang.String separator, java.lang.String blockCommentStartDelimiter, java.lang.String blockCommentEndDelimiter)
      Execute the given SQL script.
      static void executeSqlScript(java.sql.Connection connection, Resource resource)
      Execute the given SQL script using default settings for statement separators, comment delimiters, and exception handling flags.
      static java.lang.String readScript(java.io.LineNumberReader lineNumberReader, java.lang.String commentPrefix, java.lang.String separator)
      Read a script from the provided LineNumberReader, using the supplied comment prefix and statement separator, and build a String containing the lines.
      static void splitSqlScript(EncodedResource resource, java.lang.String script, java.lang.String separator, java.lang.String commentPrefix, java.lang.String blockCommentStartDelimiter, java.lang.String blockCommentEndDelimiter, java.util.List<java.lang.String> statements)
      Split an SQL script into separate statements delimited by the provided separator string.
      static void splitSqlScript(java.lang.String script, char separator, java.util.List<java.lang.String> statements)
      Split an SQL script into separate statements delimited by the provided separator character.
      static void splitSqlScript(java.lang.String script, java.lang.String separator, java.util.List<java.lang.String> statements)
      Split an SQL script into separate statements delimited by the provided separator string.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEFAULT_STATEMENT_SEPARATOR

        public static final java.lang.String DEFAULT_STATEMENT_SEPARATOR
        Default statement separator within SQL scripts: ";".
        See Also:
        Constant Field Values
      • FALLBACK_STATEMENT_SEPARATOR

        public static final java.lang.String FALLBACK_STATEMENT_SEPARATOR
        Fallback statement separator within SQL scripts: "\n".

        Used if neither a custom separator nor the DEFAULT_STATEMENT_SEPARATOR is present in a given script.

        See Also:
        Constant Field Values
      • DEFAULT_COMMENT_PREFIX

        public static final java.lang.String DEFAULT_COMMENT_PREFIX
        Default prefix for single-line comments within SQL scripts: "--".
        See Also:
        Constant Field Values
      • DEFAULT_BLOCK_COMMENT_START_DELIMITER

        public static final java.lang.String DEFAULT_BLOCK_COMMENT_START_DELIMITER
        Default start delimiter for block comments within SQL scripts: "/*".
        See Also:
        Constant Field Values
      • DEFAULT_BLOCK_COMMENT_END_DELIMITER

        public static final java.lang.String DEFAULT_BLOCK_COMMENT_END_DELIMITER
        Default end delimiter for block comments within SQL scripts: "*/".
        See Also:
        Constant Field Values
    • Constructor Detail

      • ScriptUtils

        public ScriptUtils()
    • Method Detail

      • splitSqlScript

        public static void splitSqlScript(java.lang.String script,
                                          char separator,
                                          java.util.List<java.lang.String> statements)
                                   throws ScriptException
        Split an SQL script into separate statements delimited by the provided separator character. Each individual statement will be added to the provided List.

        Within the script, "--" will be used as the comment prefix; any text beginning with the comment prefix and extending to the end of the line will be omitted from the output. Similarly, "/*" and "*/" will be used as the start and end block comment delimiters: any text enclosed in a block comment will be omitted from the output. In addition, multiple adjacent whitespace characters will be collapsed into a single space.

        Parameters:
        script - the SQL script
        separator - character separating each statement — typically a ';'
        statements - the list that will contain the individual statements
        Throws:
        ScriptException - if an error occurred while splitting the SQL script
        See Also:
        splitSqlScript(String, String, List), splitSqlScript(EncodedResource, String, String, String, String, String, List)
      • splitSqlScript

        public static void splitSqlScript(java.lang.String script,
                                          java.lang.String separator,
                                          java.util.List<java.lang.String> statements)
                                   throws ScriptException
        Split an SQL script into separate statements delimited by the provided separator string. Each individual statement will be added to the provided List.

        Within the script, "--" will be used as the comment prefix; any text beginning with the comment prefix and extending to the end of the line will be omitted from the output. Similarly, "/*" and "*/" will be used as the start and end block comment delimiters: any text enclosed in a block comment will be omitted from the output. In addition, multiple adjacent whitespace characters will be collapsed into a single space.

        Parameters:
        script - the SQL script
        separator - text separating each statement — typically a ';' or newline character
        statements - the list that will contain the individual statements
        Throws:
        ScriptException - if an error occurred while splitting the SQL script
        See Also:
        splitSqlScript(String, char, List), splitSqlScript(EncodedResource, String, String, String, String, String, List)
      • splitSqlScript

        public static void splitSqlScript(@Nullable
                                          EncodedResource resource,
                                          java.lang.String script,
                                          java.lang.String separator,
                                          java.lang.String commentPrefix,
                                          java.lang.String blockCommentStartDelimiter,
                                          java.lang.String blockCommentEndDelimiter,
                                          java.util.List<java.lang.String> statements)
                                   throws ScriptException
        Split an SQL script into separate statements delimited by the provided separator string. Each individual statement will be added to the provided List.

        Within the script, the provided commentPrefix will be honored: any text beginning with the comment prefix and extending to the end of the line will be omitted from the output. Similarly, the provided blockCommentStartDelimiter and blockCommentEndDelimiter delimiters will be honored: any text enclosed in a block comment will be omitted from the output. In addition, multiple adjacent whitespace characters will be collapsed into a single space.

        Parameters:
        resource - the resource from which the script was read
        script - the SQL script; never null or empty
        separator - text separating each statement — typically a ';' or newline character; never null
        commentPrefix - the prefix that identifies SQL line comments — typically "--"; never null or empty
        blockCommentStartDelimiter - the start block comment delimiter; never null or empty
        blockCommentEndDelimiter - the end block comment delimiter; never null or empty
        statements - the list that will contain the individual statements
        Throws:
        ScriptException - if an error occurred while splitting the SQL script
      • readScript

        public static java.lang.String readScript(java.io.LineNumberReader lineNumberReader,
                                                  @Nullable
                                                  java.lang.String commentPrefix,
                                                  @Nullable
                                                  java.lang.String separator)
                                           throws java.io.IOException
        Read a script from the provided LineNumberReader, using the supplied comment prefix and statement separator, and build a String containing the lines.

        Lines beginning with the comment prefix are excluded from the results; however, line comments anywhere else — for example, within a statement — will be included in the results.

        Parameters:
        lineNumberReader - the LineNumberReader containing the script to be processed
        commentPrefix - the prefix that identifies comments in the SQL script — typically "--"
        separator - the statement separator in the SQL script — typically ";"
        Returns:
        a String containing the script lines
        Throws:
        java.io.IOException - in case of I/O errors
      • containsSqlScriptDelimiters

        public static boolean containsSqlScriptDelimiters(java.lang.String script,
                                                          java.lang.String delim)
        Does the provided SQL script contain the specified delimiter?
        Parameters:
        script - the SQL script
        delim - the string delimiting each statement - typically a ';' character
      • executeSqlScript

        public static void executeSqlScript(java.sql.Connection connection,
                                            EncodedResource resource,
                                            boolean continueOnError,
                                            boolean ignoreFailedDrops,
                                            java.lang.String commentPrefix,
                                            @Nullable
                                            java.lang.String separator,
                                            java.lang.String blockCommentStartDelimiter,
                                            java.lang.String blockCommentEndDelimiter)
                                     throws ScriptException
        Execute the given SQL script.

        Statement separators and comments will be removed before executing individual statements within the supplied script.

        Warning: this method does not release the provided Connection.

        Parameters:
        connection - the JDBC connection to use to execute the script; already configured and ready to use
        resource - the resource (potentially associated with a specific encoding) to load the SQL script from
        continueOnError - whether or not to continue without throwing an exception in the event of an error
        ignoreFailedDrops - whether or not to continue in the event of specifically an error on a DROP statement
        commentPrefix - the prefix that identifies single-line comments in the SQL script — typically "--"
        separator - the script statement separator; defaults to ";" if not specified and falls back to "\n" as a last resort; may be set to "^^^ END OF SCRIPT ^^^" to signal that the script contains a single statement without a separator
        blockCommentStartDelimiter - the start block comment delimiter; never null or empty
        blockCommentEndDelimiter - the end block comment delimiter; never null or empty
        Throws:
        ScriptException - if an error occurred while executing the SQL script
        See Also:
        DEFAULT_STATEMENT_SEPARATOR, FALLBACK_STATEMENT_SEPARATOR, EOF_STATEMENT_SEPARATOR, DataSourceUtils.getConnection(javax.sql.DataSource), DataSourceUtils.releaseConnection(java.sql.Connection, javax.sql.DataSource)