public class

SQLErrorCodeSQLExceptionTranslator

extends AbstractFallbackSQLExceptionTranslator
java.lang.Object
   ↳ org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator
     ↳ org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator

Class Overview

Implementation of SQLExceptionTranslator that analyzes vendor-specific error codes. More precise than an implementation based on SQL state, but heavily vendor-specific.

This class applies the following matching rules:

  • Try custom translation implemented by any subclass. Note that this class is concrete and is typically used itself, in which case this rule doesn't apply.
  • Apply error code matching. Error codes are obtained from the SQLErrorCodesFactory by default. This factory loads a "sql-error-codes.xml" file from the class path, defining error code mappings for database names from database metadata.
  • Fallback to a fallback translator. SQLStateSQLExceptionTranslator is the default fallback translator, analyzing the exception's SQL state only. On Java 6 which introduces its own SQLException subclass hierarchy, we will use SQLExceptionSubclassTranslator by default, which in turns falls back to Spring's own SQL state translation when not encountering specific subclasses.

The configuration file named "sql-error-codes.xml" is by default read from this package. It can be overridden through a file of the same name in the root of the class path (e.g. in the "/WEB-INF/classes" directory), as long as the Spring JDBC package is loaded from the same ClassLoader.

Summary

[Expand]
Inherited Fields
From class org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator
Public Constructors
SQLErrorCodeSQLExceptionTranslator()
Constructor for use as a JavaBean.
SQLErrorCodeSQLExceptionTranslator(DataSource dataSource)
Create a SQL error code translator for the given DataSource.
SQLErrorCodeSQLExceptionTranslator(String dbName)
Create a SQL error code translator for the given database product name.
SQLErrorCodeSQLExceptionTranslator(SQLErrorCodes sec)
Create a SQLErrorCode translator given these error codes.
Public Methods
SQLErrorCodes getSqlErrorCodes()
Return the error codes used by this translator.
void setDataSource(DataSource dataSource)
Set the DataSource for this translator.
void setDatabaseProductName(String dbName)
Set the database product name for this translator.
void setSqlErrorCodes(SQLErrorCodes sec)
Set custom error codes to be used for translation.
Protected Methods
DataAccessException createCustomException(String task, String sql, SQLException sqlEx, Class exceptionClass)
Create a custom DataAccessException, based on a given exception class from a CustomSQLErrorCodesTranslation definition.
DataAccessException customTranslate(String task, String sql, SQLException sqlEx)
Subclasses can override this method to attempt a custom mapping from SQLException to DataAccessException.
DataAccessException doTranslate(String task, String sql, SQLException ex)
Template method for actually translating the given exception.
[Expand]
Inherited Methods
From class org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator
From class java.lang.Object
From interface org.springframework.jdbc.support.SQLExceptionTranslator

Public Constructors

public SQLErrorCodeSQLExceptionTranslator ()

Constructor for use as a JavaBean. The SqlErrorCodes or DataSource property must be set.

public SQLErrorCodeSQLExceptionTranslator (DataSource dataSource)

Create a SQL error code translator for the given DataSource. Invoking this constructor will cause a Connection to be obtained from the DataSource to get the metadata.

Parameters
dataSource DataSource to use to find metadata and establish which error codes are usable

public SQLErrorCodeSQLExceptionTranslator (String dbName)

Create a SQL error code translator for the given database product name. Invoking this constructor will avoid obtaining a Connection from the DataSource to get the metadata.

Parameters
dbName the database product name that identifies the error codes entry

public SQLErrorCodeSQLExceptionTranslator (SQLErrorCodes sec)

Create a SQLErrorCode translator given these error codes. Does not require a database metadata lookup to be performed using a connection.

Parameters
sec error codes

Public Methods

public SQLErrorCodes getSqlErrorCodes ()

Return the error codes used by this translator. Usually determined via a DataSource.

public void setDataSource (DataSource dataSource)

Set the DataSource for this translator.

Setting this property will cause a Connection to be obtained from the DataSource to get the metadata.

Parameters
dataSource DataSource to use to find metadata and establish which error codes are usable

public void setDatabaseProductName (String dbName)

Set the database product name for this translator.

Setting this property will avoid obtaining a Connection from the DataSource to get the metadata.

Parameters
dbName the database product name that identifies the error codes entry

public void setSqlErrorCodes (SQLErrorCodes sec)

Set custom error codes to be used for translation.

Parameters
sec custom error codes to use

Protected Methods

protected DataAccessException createCustomException (String task, String sql, SQLException sqlEx, Class exceptionClass)

Create a custom DataAccessException, based on a given exception class from a CustomSQLErrorCodesTranslation definition.

Parameters
task readable text describing the task being attempted
sql SQL query or update that caused the problem. May be null.
sqlEx the offending SQLException
exceptionClass the exception class to use, as defined in the CustomSQLErrorCodesTranslation definition
Returns
  • null if the custom exception could not be created, otherwise the resulting DataAccessException. This exception should include the sqlEx parameter as a nested root cause.

protected DataAccessException customTranslate (String task, String sql, SQLException sqlEx)

Subclasses can override this method to attempt a custom mapping from SQLException to DataAccessException.

Parameters
task readable text describing the task being attempted
sql SQL query or update that caused the problem. May be null.
sqlEx the offending SQLException
Returns
  • null if no custom translation was possible, otherwise a DataAccessException resulting from custom translation. This exception should include the sqlEx parameter as a nested root cause. This implementation always returns null, meaning that the translator always falls back to the default error codes.

protected DataAccessException doTranslate (String task, String sql, SQLException ex)

Template method for actually translating the given exception.

The passed-in arguments will have been pre-checked. Furthermore, this method is allowed to return null to indicate that no exception match has been found and that fallback translation should kick in.

Parameters
task readable text describing the task being attempted
sql SQL query or update that caused the problem (may be null)
ex the offending SQLException
Returns
  • the DataAccessException, wrapping the SQLException; or null if no exception match found