Package 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
Description
`static final String`
`SQL_ERROR_CODE_DEFAULT_PATH`
The name of default SQL error code files, loading from the class path.
`static final String`
`SQL_ERROR_CODE_OVERRIDE_PATH`
The name of custom SQL error codes file, loading from the root of the class path (for example, from the "/WEB-INF/classes" directory).

## Constructor Summary

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

## Method Summary

Modifier and Type
Method
Description
`SQLErrorCodes`
`getErrorCodes(String databaseName)`
Return the `SQLErrorCodes` instance for the given database.
`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.
`static SQLErrorCodesFactory`
`getInstance()`
Return the singleton instance.
`protected org.springframework.core.io.Resource`
`loadResource(String path)`
Load the given resource from the class path.
`SQLErrorCodes`
`registerDatabase(DataSource dataSource, String databaseName)`
Associate the specified database name with the given `DataSource`.
`SQLErrorCodes`
`resolveErrorCodes(DataSource dataSource)`
Return `SQLErrorCodes` for the given `DataSource`, evaluating "databaseProductName" from the `DatabaseMetaData`, or `null` if case of a JDBC meta-data access problem.
`SQLErrorCodes`
`unregisterDatabase(DataSource dataSource)`
Clear the cache for the specified `DataSource`, if registered.

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

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

## Field Details

### 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 (for example, 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 Details

### 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 Details

### getInstance

public static SQLErrorCodesFactory getInstance()
Return the singleton instance.

### loadResource

@Nullable protected org.springframework.core.io.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 databaseName)
Return the `SQLErrorCodes` instance for the given database.

No need for a database meta-data lookup.

Parameters:
  `databaseName` - the database name (must not be `null`)
Returns:
  the `SQLErrorCodes` instance for the given database (never `null`; potentially empty)
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 (never `null`; potentially empty)
See Also:
  - `DatabaseMetaData.getDatabaseProductName()`

### resolveErrorCodes

@Nullable public SQLErrorCodes resolveErrorCodes(DataSource dataSource)
Return `SQLErrorCodes` for the given `DataSource`, evaluating "databaseProductName" from the `DatabaseMetaData`, or `null` if case of a JDBC meta-data access problem.

Parameters:
  `dataSource` - the `DataSource` identifying the database
Returns:
  the corresponding `SQLErrorCodes` object, or `null` in case of a JDBC meta-data access problem
Since:
  5.2.9
See Also:
  - `DatabaseMetaData.getDatabaseProductName()`

### registerDatabase

public SQLErrorCodes registerDatabase(DataSource dataSource, String databaseName)
Associate the specified database name with the given `DataSource`.

Parameters:
  `dataSource` - the `DataSource` identifying the database
  `databaseName` - the corresponding database name as stated in the error codes definition file (must not be `null`)
Returns:
  the corresponding `SQLErrorCodes` object (never `null`)
See Also:
  - `unregisterDatabase(DataSource)`

### unregisterDatabase

@Nullable public SQLErrorCodes unregisterDatabase(DataSource dataSource)
Clear the cache for the specified `DataSource`, if registered.

Parameters:
  `dataSource` - the `DataSource` identifying the database
Returns:
  the corresponding `SQLErrorCodes` object that got removed, or `null` if not registered
Since:
  4.3.5
See Also:
  - `registerDatabase(DataSource, String)`