org.springframework.jdbc.support

## Class SQLErrorCodesFactory

- java.lang.Object
- - org.springframework.jdbc.support.SQLErrorCodesFactory

-     public class SQLErrorCodesFactory
      extends Object

  Factory for creating `SQLErrorCodes` based on the "databaseProductName" taken from the `DatabaseMetaData`.

  Returns `SQLErrorCodes` populated with vendor codes defined in a configuration file named "sql-error-codes.xml". Reads the default file in this package if not overridden by a file in the root of the class path (for example in the "/WEB-INF/classes" directory).

  Author:
    Thomas Risberg, Rod Johnson, Juergen Hoeller
  See Also:
    `DatabaseMetaData.getDatabaseProductName()`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `SQL_ERROR_CODE_DEFAULT_PATH` The name of default SQL error code files, loading from the class path.
    `static String` | `SQL_ERROR_CODE_OVERRIDE_PATH` The name of custom SQL error codes file, loading from the root of the class path (e.g.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `SQLErrorCodesFactory()` Create a new instance of the `SQLErrorCodesFactory` class.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `SQLErrorCodes` | `getErrorCodes(DataSource dataSource)` Return `SQLErrorCodes` for the given `DataSource`, evaluating "databaseProductName" from the `DatabaseMetaData`, or an empty error codes instance if no `SQLErrorCodes` were found.
    `SQLErrorCodes` | `getErrorCodes(String dbName)` Return the `SQLErrorCodes` instance for the given database.
    `static SQLErrorCodesFactory` | `getInstance()` Return the singleton instance.
    `protected Resource` | `loadResource(String path)` Load the given resource from the class path.
    `SQLErrorCodes` | `registerDatabase(DataSource dataSource, String dbName)` Associate the specified database name with the given `DataSource`.

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

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

- - ### Field Detail

    - #### SQL_ERROR_CODE_OVERRIDE_PATH

          public static final String SQL_ERROR_CODE_OVERRIDE_PATH

      The name of custom SQL error codes file, loading from the root of the class path (e.g. from the "/WEB-INF/classes" directory).
      See Also:
        Constant Field Values

    - #### SQL_ERROR_CODE_DEFAULT_PATH

          public static final String SQL_ERROR_CODE_DEFAULT_PATH

      The name of default SQL error code files, loading from the class path.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### SQLErrorCodesFactory

          protected SQLErrorCodesFactory()

      Create a new instance of the `SQLErrorCodesFactory` class.

      Not public to enforce Singleton design pattern. Would be private except to allow testing via overriding the `loadResource(String)` method.

      Do not subclass in application code.

      See Also:
        `loadResource(String)`

  - ### Method Detail

    - #### getInstance

          public static SQLErrorCodesFactory getInstance()

      Return the singleton instance.

    - #### loadResource

          protected Resource loadResource(String path)

      Load the given resource from the class path.

      Not to be overridden by application developers, who should obtain instances of this class from the static `getInstance()` method.

      Protected for testability.

      Parameters:
        `path` - resource path; either a custom path or one of either `SQL_ERROR_CODE_DEFAULT_PATH` or `SQL_ERROR_CODE_OVERRIDE_PATH`.
      Returns:
        the resource, or `null` if the resource wasn't found
      See Also:
        `getInstance()`

    - #### getErrorCodes

          public SQLErrorCodes getErrorCodes(String dbName)

      Return the `SQLErrorCodes` instance for the given database.

      No need for a database metadata lookup.

      Parameters:
        `dbName` - the database name (must not be `null`)
      Returns:
        the `SQLErrorCodes` instance for the given database
      Throws:
        `IllegalArgumentException` - if the supplied database name is `null`

    - #### getErrorCodes

          public SQLErrorCodes getErrorCodes(DataSource dataSource)

      Return `SQLErrorCodes` for the given `DataSource`, evaluating "databaseProductName" from the `DatabaseMetaData`, or an empty error codes instance if no `SQLErrorCodes` were found.
      Parameters:
        `dataSource` - the `DataSource` identifying the database
      Returns:
        the corresponding `SQLErrorCodes` object
      See Also:
        `DatabaseMetaData.getDatabaseProductName()`

    - #### registerDatabase

          public SQLErrorCodes registerDatabase(DataSource dataSource,
                                       String dbName)

      Associate the specified database name with the given `DataSource`.
      Parameters:
        `dataSource` - the `DataSource` identifying the database
        `dbName` - the corresponding database name as stated in the error codes definition file (must not be `null`)
      Returns:
        the corresponding `SQLErrorCodes` object