I went through the SQL:2008 draft standard and created an enum for all
SQLStates. The only SQLStates without full Javadoc are HZxxx for
remote database access (patches welcome!). This was *a lot* of work :)
I hope you find this useful.

Gili

-------------------------------
import com.google.common.collect.Maps;
import java.util.Map;

/**
 * Standard SQLState codes.
 *
 * Codes are listed in the same order as the SQL:2008 standard.
 *
 * @author Gili Tzabari
 * @see http://en.wikipedia.org/wiki/SQL#cite_note-27
 * @see http://kb.askmonty.org/v/sqlstate-codes
 */
public enum SQLState
{
        /**
         * Returned if the statement contains a preparable dynamic cursor
name that is ambiguous.
         */
        AMBIGUOUS_CURSOR_NAME("3C000"),
        /**
         * Attempted to assign a value to a non-updatable column.
         */
        CANNOT_ASSIGN_TO_NON_UPDATABLE_COLUMN("0U000"),
        /**
         * Returned if any object column is directly or indirectly referenced
in the <code>order by</code> clause
         * of a dynamic cursor definition.
         */
        CANNOT_ASSIGN_TO_ORDERING_COLUMN("0V000"),
        /**
         * The result of a SELECT INTO, scalar fullselect, or subquery of a
basic predicate returned more
         * than one value.
         */
        CARDINALITY_VIOLATION("21000"),
        /**
         * Unable to establish a database connection.
         */
        CONNECTION_EXCEPTION("08000"),
        /**
         * Attempted to disconnect a non-existent database connection.
         */
        CONNECTION_DOES_NOT_EXIST("08003"),
        /**
         * The specified connection could not be selected.
         */
        CONNECTION_FAILURE("08006"),
        /**
         * Returned if a connection with the specified name is already
established.
         */
        CONNECTION_NAME_IN_USE("08002"),
        /**
         * Returned if the client is unable to connect to the database.
         */
        CANNOT_ESTABLISH_CONNECTION("08001"),
        /**
         * Returned if the server rejected the client's connection request.
         */
        CONNECTION_REJECTED("08004"),
        /**
         * Connection lost while committing or rolling back a transaction.
The client cannot verify
         * whether the transaction was committed successfully, rolled back or
left active.
         */
        TRANSACTION_RESOLUTION_UNKNOWN("08007"),
        /**
         * The "cursor sensitivity exception" class identifies exception
conditions that relate to Cursors
         * and their sensitivity attribute.
         *
         * If a holdable cursor is open during an SQL-transaction <code>T</
code> and it is held open for
         * a subsequent SQL-transaction, then whether any significant changes
made to SQL-data (by
         * <code>T</code> or any subsequent SQL-transaction in which the
cursor is held open) are visible
         * through that cursor in the subsequent SQL-transaction before that
cursor is closed is
         * determined as follows:
         *
         * - If the cursor is insensitive, then significant changes are not
visible.
         * - If the cursor is sensitive, then the visibility of significant
changes is implementation-defined.
         * - If the cursor is asensitive, then the visibility of significant
changes.
         */
        CURSOR_SENSITIVITY_EXCEPTION("36000"),
        /**
         * Returned if a sensitive cursor has not been held into a subsequent
SQL-transaction, and the
         * change resulting from the successful execution of this statement
could not be made visible to
         * the cursor.
         *
         * For example, an attempt was made to execute a positioned DELETE
statement, but there is a
         * sensitive Cursor open, and (for some implementation-dependent
reason) the effects of the
         * DELETE cannot be made visible via that Cursor.
         */
        CURSOR_SENSITIVITY_REQUEST_FAILED("36002"),
        /**
         * A cursor is insensitive, and the SQL-implementation is unable to
guarantee that significant
         * changes will be invisible through the cursor during the SQL-
transaction in which it is opened
         * and every subsequent SQL-transaction during which it may be held
open.
         */
        CURSOR_SENSITIVITY_REQUEST_REJECTED("36001"),
        /**
         * The specified data was inappropriate for the column type.
         */
        DATA_EXCEPTION("22000"),
        /**
         * The maximum number of elements in the target array is less than
the number of elements in
         * the source array and the extra source elements are not all NULL.
         */
        ARRAY_DATA_RIGHT_TRUNCATION_EXCEPTION("2202F"),
        /**
         * Attempted to reference an array index which is out of range.
         */
        ARRAY_ELEMENT_ERROR("2202E"),
        /**
         * Attempted to replace a substring that matches an XQuery regular
expression with a replacement
         * character string, but the matching substring is a zero-length
string.
         */
        ZERO_LENGTH_STRING("2201U"),
        /**
         * A character is not in the coded character set or the conversion is
not supported.
         */
        CHARACTER_NOT_IN_REPERTOIRE("22021"),
        /**
         * Datetime field overflow occurred; for example, an arithmetic
operation on a date or timestamp
         * has a result that is not within the valid range of dates. See also
SQLSTATE 22007.
         */
        DATETIME_FIELD_OVERFLOW("22008"),
        /**
         * Attempted to divide a number by zero.
         */
        DIVISION_BY_ZERO("22012"),
        /**
         * An error occurred on assignment.
         */
        ERROR_IN_ASSIGNMENT("22005"),
        /**
         * Attempted to use an invalid escape character.
         */
        ESCAPE_CHARACTER_CONFLICT("2200B"),
        /**
         * Indicator is too small for size value.
         */
        INDICATOR_OVERFLOW("22022"),
        /**
         * The value of an interval field exceeded its maximum value. See
also SQLSTATE 22006.
         */
        INTERVAL_FIELD_OVERFLOW("22015"),
        /**
        The result of an aggregate function is out of the range of an
interval type.
         */
        INTERVAL_VALUE_OUT_OF_RANGE("2200P"),
        /**
         * Passed an invalid argument into a LOG function.
         */
        INVALID_ARGUMENT_FOR_LOGARITHM("2201E"),
        /**
         * Passed an invalid argument into a POWER function.
         */
        INVALID_ARGUMENT_FOR_POWER_FUNCTION("2201F"),
        /**
         * Passed an invalid argument into a WIDTH_BUCKET function.
         */
        INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION("2201G"),
        /**
         * Tried to convert a value to a data type where the conversion is
undefined, or when an error
         * occurred trying to convert.
         */
        INVALID_CHARACTER_VALUE_FOR_CAST("22018"),
        /**
         * An invalid datetime format was detected; that is, an invalid
string representation or value
         * was specified. See also SQLSTATE 22008, 22018.
         */
        INVALID_DATETIME_FORMAT("22007"),
        /**
         * The LIKE predicate has an invalid escape character.
         */
        INVALID_ESCAPE_CHARACTER("22019"),
        /**
         * Returned if the length of the escape octet is not one.
         */
        INVALID_ESCAPE_OCTET("2200D"),
        /**
         * The LIKE predicate string pattern contains an invalid occurrence
of an escape character.
         */
        INVALID_ESCAPE_SEQUENCE("22025"),
        /**
         * The value of the indicator variable is less than zero but is not
equal to -1 (SQL_NULL_DATA).
         */
        INVALID_INDICATOR_PARAMETER_VALUE("22010"),
        /**
         * Specified an interval with an invalid format. For example, a year-
month interval should
         * contain only a year integer, a '-' separator, and a month integer.
See also SQLSTATE 22015.
         */
        INVALID_INTERVAL_FORMAT("22006"),
        /**
         * A parameter or host variable value is invalid.
         */
        INVALID_PARAMETER_VALUE("22023"),
        /**
         * Returned if the window frame bound preceding or following a WINDOW
function is negative or null.
         *
         * @see http://en.wikipedia.org/wiki/Select_%28SQL%29#Window_function
         */
        INVALID_SIZE_IN_WINDOW_FUNCTION("22013"),
        /**
         * Returned if the specified regular expression does not have a valid
format.
         */
        INVALID_REGULAR_EXPRESSION("2201B"),
        /**
         * Invalid repeat argument in SAMPLE clause.
         */
        INVALID_REPEAT_ARGUMENT_IN_SAMPLE_CLAUSE("2202G"),
        /**
         * The sample size was less than 0 or more than 100.
         */
        INVALID_SAMPLE_SIZE("2202H"),
        /**
         * The time zone displacement value is outside the range -12:59 to
14:00.
         *
         * This could happen for "SET LOCAL TIME ZONE INTERVAL '22:00' HOUR
TO MINUTE;", or for
         * "TIMESTAMP '1994-01-01 02:00:00+10:00'". (In the latter case, it
is the result of the
         * calculation that is a problem.)
         */
        INVALID_TIME_ZONE_DISPLACEMENT_VALUE("22009"),
        /**
         * A required escape character was missing or in the wrong location.
         */
        INVALID_USE_OF_ESCAPE_CHARACTER("2200C"),
        /**
         * The specified xquery option flag is invalid.
         */
        INVALID_XQUERY_OPTION_FLAG("2201T"),
        /**
         * The regular expression specified in the xquery expression is
invalid.
         */
        INVALID_XQUERY_REGULAR_EXPRESSION("2201S"),
        /**
         * The replacement string specified in the xquery expression is
invalid.
         */
        INVALID_XQUERY_REPLACEMENT_STRING("2201V"),
        /**
         * Returned if the return value of a type-preserving function is not
compatible with most specific
         * return type of the function.
         */
        MOST_SPECIFIC_TYPE_MISMATCH("2200G"),
        /**
         * The result of an aggregate function is out of the range of a
multiset type.
         */
        MULTISET_VALUE_OVERFLOW("2200Q"),
        /**
         * Returned when an operation inserts a non-character code point into
a unicode string.
         */
        NONCHARACTER_IN_UCS_STRING("22029"),
        /**
         * Attempted to invoke a mutator function on NULL.
         */
        NULL_INSTANCE_USED_IN_MUTATOR_FUNCTION("2202D"),
        /**
         * Attempted to insert a null row into a table that disallows them.
         */
        NULL_ROW_NOT_PERMITTED_IN_TABLE("2201C"),
        /**
         * Attempted to assign a value to an array index whose value was
null.
         */
        NULL_VALUE_IN_ARRAY_TARGET("2200E"),
        /**
         * A null value, or the absence of an indicator parameter was
detected; for example, the null
         * value cannot be assigned to a host variable, because no indicator
variable is specified.
         */
        NULL_VALUE_NO_INDICATOR_PARAMETER("22002"),
        /**
         * A null value is not allowed.
         */
        NULL_VALUE_NOT_ALLOWED_BY_FUNCTION("22004"),
        /**
         * A numeric value is out of range. Often this is the result of an
arithmetic overflow.
         * For example, "UPDATE ... SET SMALLINT_COLUMN = 9999999999".
         */
        NUMERIC_VALUE_OUT_OF_RANGE("22003"),
        /**
         * Returned if a sequence generator cannot generate any more numbers
because it has already
         * generated its maximum value and it is configured with NO CYCLE.
         */
        SEQUENCE_GENERATOR_LIMIT_EXCEEDED("2200H"),
        /**
         * Attempted to update a bit string but the specified value does not
match the length of the bit
         * string.
         */
        STRING_DATA_LENGTH_MISMATCH("22026"),
        /**
         * Character data, right truncation occurred; for example, an update
or insert value is a string
         * that is too long for the column, or a datetime value cannot be
assigned to a host variable,
         * because it is too small. No truncation actually occurs since the
SQL statement fails. See
         * SQLSTATE 01004.
         */
        STRING_DATA_RIGHT_TRUNCATION("22001"),
        /**
         * A substring error occurred; for example, an argument of SUBSTR is
out of range.
         */
        SUBSTRING_ERROR("22011"),
        /**
         * Attempted to invoke the TRIM function with a first argument whose
length was greater than
         * one character.
         */
        TRIM_ERROR("22027"),
        /**
         * A NULL-terminated input host variable or parameter did not contain
a NULL.
         */
        UNTERMINATED_C_STRING("22024"),
        /**
         * Character strings must have a length of one.
         */
        ZERO_LENGTH_CHARACTER_STRING("2200F"),
        /**
         * Attempted to "REVOKE GRANT OPTION FOR" with dependent privileges
and without a "CASCADE".
         */
        DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST("2B000"),
        /**
         * An error occurred while invoking a diagnostics function.
         */
        DIAGNOSTICS_EXCEPTION("0Z000"),
        /**
         * Attempted to PUSH an operation onto the diagnostics stack but the
number of operations in
         * the stack exceed the implementation-dependent maximum.
         */
        MAXIMUM_NUMBER_OF_STACKED_DIAGNOSTICS_AREAS_EXCEEDED("0Z001"),
        /**
         * An error occurred while executing dynamic SQL.
         */
        DYNAMIC_SQL_ERROR("07000"),
        /**
         * Returned if prepared statement does not conform to the Format and
Syntax Rules of a dynamic
         * single row select statement.
         */
        CURSOR_SPECIFICATION_CANNOT_BE_EXECUTED("07003"),
        /**
         * The supplied input or output arguments could not be transformed to
the types expected by the
         * dynamic SQL script.
         */
        DATA_TYPE_TRANSFORM_FUNCTION_VIOLATION("0700B"),
        /**
         * Specified a descriptor item name DATA on a descriptor area whose
type is ARRAY, ARRAY LOCATOR,
         * MULTISET, or MULTISET LOCATOR.
         */
        INVALID_DATA_TARGET("0700D"),
        /**
         * Specified an invalid datetime interval.
         */
        INVALID_DATETIME_INTERVAL_CODE("0700F"),
        /**
         * Using the embedded SQL ALLOCATE DESCRIPTOR statement, you
allocated a 5-item descriptor.
         * Now you are trying to use the sixth item in that descriptor. See
also SQLSTATE 07009.
         */
        INVALID_DESCRIPTOR_COUNT("07008"),
        /**
         * you are using a CLI descriptor function (such as SQLBindCol or
SQLBindParameter) and the
         * Column number is less than 1 or greater than the maximum number of
Columns. Or, you are using
         * the embedded SQL ALLOCATE DESCRIPTOR statement with a size which
is less than 1 or greater
         * than an implementation-defined maximum. See also SQLSTATE 07008.
         */
        INVALID_DESCRIPTOR_INDEX("07009"),
        /**
         * Invalid LEVEL specified in SET DESCRIPTOR statement.
         */
        INVALID_LEVEL_VALUE("0700E"),
        /**
         *      The statement name of the cursor identifies a prepared statement
that cannot be associated
         * with a cursor.
         */
        PREPARED_STATEMENT_NOT_A_CURSOR_SPECIFICATION("07005"),
        /**
         * An input variable, transition variable, or parameter marker cannot
be used, because of its
         * data type.
         */
        RESTRICTED_DATA_TYPE_ATTRIBUTE_VIOLATION("07006"),
        /**
         * Attempted to GET DESCRIPTOR DATA on a descriptor area whose type
is ARRAY, ARRAY LOCATOR,
         * MULTISET, or MULTISET LOCATOR.
         */
        UNDEFINED_DATA_VALUE("0700C"),
        /**
         * You might encounter this error if you set the length of a
descriptor, then
         * <code>EXECUTE ... USING descriptor</code>. Often this exception
results from consistency-check
         * failure during SQLExecute.
         */
        USING_CLAUSE_DOES_NOT_MATCH_DYNAMIC_PARAMETERS("07001"),
        /**
         * Often this exception results from consistency-check failure during
SQLExecute.
         *
         * Sometimes this exception results from an incorrect number of
parameters. See also
         * SQLSTATE 07008.
         */
        USING_CLAUSE_DOES_NOT_MATCH_TARGET_SPECIFICATIONS("07002"),
        /**
         * You cannot simply EXECUTE an SQL statement which has dynamic
parameters — you also need to
         * use a USING clause. See also SQLSTATE 07007.
         */
        USING_CLAUSE_REQUIRED_FOR_DYNAMIC_PARAMETERS("07004"),
        /**
         * You cannot simply EXECUTE an SQL statement which has result fields
— you also need to use a
         * USING clause. See also SQLSTATE 07004.
         */
        USING_CLAUSE_REQUIRED_FOR_RESULT_FIELDS("07007"),
        /**
         * An error occurred executing an external routine.
         *
         * External routines are stored procedures implemented by non-SQL
languages (i.e. Java).
         */
        EXTERNAL_ROUTINE_EXCEPTION("38000"),
        /**
         * The external routine is not allowed to execute SQL statements.
         */
        CONTAINING_SQL_NOT_PERMITTED("38001"),
        /**
         * The routine attempted to modify data, but the routine was not
defined as MODIFIES SQL DATA.
         */
        MODIFYING_SQL_DATA_NOT_PERMITTED("38002"),
        /**
         * The statement is not allowed in a routine.
         */
        PROHIBITED_SQL_STATEMENT_ATTEMPTED_BY_ROUTINE("38003"),
        /**
         * The external routine attempted to read data, but the routine was
not defined as READS SQL DATA.
         */
        READING_SQL_DATA_NOT_PERMITTED_BY_ROUTINE("38004"),
        /**
         * An error occurred before or after invoking an external routine.
         *
         * External routines are stored procedures implemented by non-SQL
languages (i.e. Java).
         */
        EXTERNAL_ROUTINE_INVOCATION_EXCEPTION("39000"),
        /**
         * A null value is not allowed for an IN or INOUT argument when using
PARAMETER STYLE GENERAL or
         * an argument that is a Java™ primitive type.
         */
        NULL_VALUE_NOT_ALLOWED_BY_EXTERNAL_ROUTINE("39004"),
        /**
         * The "feature not supported" class identifies exception conditions
that relate to features
         * you're trying to use, but that your DBMS hasn't implemented. The
Standard does not specify
         * what will cause this SQLSTATE, possibly because the expectation is
that all features will
         * be supported.
         */
        FEATURE_NOT_SUPPORTED("0A000"),
        /**
         * A single transaction cannot be performed on multiple servers. Such
a feature is sophisticated
         * and rare.
         */
        MULTIPLE_SERVER_TRANSACTIONS("0A001"),
        /**
         * The operation violated a table constraint.
         */
        INTEGRITY_CONSTRAINT_VIOLATION("23000"),
        /**
         * The update or delete of a parent key is prevented by a RESTRICT
update or delete rule.
         * See also SQLSTATE 40002.
         */
        RESTRICT_VIOLATION("23001"),
        /**
         * Authorization name is invalid.
         */
        INVALID_AUTHORIZATION_SPECIFICATION("28000"),
        /**
         * A <code>Catalog name</code> could be invalid if it is used as a
qualifier or as the
         * argument of SET CATALOG, and does not refer to an existing Catalog
or is not a valid
         * <code>identifier</code>.
         */
        INVALID_CATALOG_NAME("3D000"),
        /**
         * Presumably an invalid Character set name would be one that begins
with a digit, contains a
         * non-Latin letter, etc.
         */
        INVALID_CHARACTER_SET_NAME("2C000"),
        /**
         * With embedded SQL, you get this by saying "GET DIAGNOSTICS
EXCEPTION 0". With the CLI, you get
         * this by calling SQLGetDiagRec or SQLGetDiagField with a
RecordNumber parameter less than 1.
         * If RecordNumber is greater than the number of status records, you
don't get this error.
         * Instead, you get an NO_DATA return code.
         */
        INVALID_CONDITION_NUMBER("35000"),
        /**
         * For a CONNECT statement, the argument must be a valid
<code>identifier</code>.
         */
        INVALID_CONNECTION_NAME("2E000"),
        /**
         * Cursor name is invalid.
         */
        INVALID_CURSOR_NAME("34000"),
        /**
         * The cursor is closed or has no current row.
         */
        INVALID_CURSOR_STATE("24000"),
        /**
         * The specified grantor may not GRANT access.
         */
        INVALID_GRANTOR("0L000"),
        /**
         * Invalid role specification. The specified role does not exist or
is not granted to the
         * specified user.
         */
        INVALID_ROLE_SPECIFICATION("0P000"),
        /**
         * The schema (collection) name is invalid.
         */
        INVALID_SCHEMA_NAME("3F000"),
        /**
         * An error occurred while specifying Schema paths.
         */
        INVALID_SCHEMA_NAME_LIST_SPECIFICATION("0E000"),
        /**
         * A <code>Collation name</code> could be invalid if it is used as a
qualifier or as the
         * argument of SET COLLATION, and does not refer to an existing
Collation or is not a valid
         * <code>identifier</code>.
         */
        INVALID_COLLATION_NAME("2H000"),
        /**
         * Returned if, in embedded SQL, you use "EXECUTE ... USING
DESCRIPTOR 'X';", a descriptor named
         * X must exist.
         */
        INVALID_SQL_DESCRIPTOR_NAME("33000"),
        /**
         * Returned if the SQL-session context of the current SQL-session
does not include a result set
         * sequence brought into existence by an invocation of SQL-invoked
procedure by the active
         * SQL-invoked routine.
         */
        INVALID_SQL_INVOKED_PROCEDURE_REFERENCE("0M000"),
        /**
         * Probable cause: you failed to PREPARE an SQL statement and now you
are trying to EXECUTE it.
         */
        INVALID_SQL_STATEMENT_NAME("26000"),
        /**
         * Attempted to refer to a statement that should have been prepared,
but was not.
         */
        INVALID_SQL_STATEMENT_IDENTIFIER("30000"),
        /**
         * An error occurred specifying a target for data.
         */
        INVALID_TARGET_TYPE_SPECIFICATION("0D000"),
        /**
         * The operation violated the transaction constraints.
         */
        INVALID_TRANSACTION_STATE("25000"),
        /**
         * START TRANSACTION or DISCONNECT or SET SESSION AUTHORIZATION or
SET ROLE statements cannot be
         * issued if a transaction has already been started.
         */
        ACTIVE_SQL_TRANSACTION("25001"),
        /**
         * SET TRANSACTION LOCAL ..., which applies only in multiple-server
contexts, is illegal if a
         * local transaction is already happening.
         */
        BRANCH_TRANSACTION_ALREADY_ACTIVE("25002"),
        /**
         * The SET TRANSACTION statement cannot be used to change isolation
level if there is a held
         * Cursor made with a different isolation level left over from the
last transaction.
         */
        HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL("25008"),
        /**
         * Returned if the transaction access mode of the SQL-transaction is
read-only and transaction
         * access mode specifies READWRITE.
         */
        INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION("25003"),
        /**
         * Returned if the isolation level of the SQL-transaction is
SERIALIZABLE and level of isolation
         * specifies anything except SERIALIZABLE, or if the isolation level
of the SQL-transaction is
         * REPEATABLE READ and level of isolation specifies anything except
REPEATABLE READ or
         * SERIALIZABLE, or if the isolation level of the SQL-transaction is
READ COMMITTED and level of
         * isolation specifies READ UNCOMMITTED.
         */
        INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION("25004"),
        /**
         * Returned if SET LOCAL TRANSACTION is executed and there is no
active transaction.
         */
        NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION("25005"),
        /**
         * An update operation is not valid because the transaction is read-
only.
         */
        READ_ONLY_SQL_TRANSACTION("25006"),
        /**
         * Some DBMSs do not allow SQL-Schema statements (such as CREATE) to
be mixed with SQL-data
         * statements (such as INSERT) in the same transaction.
         */
        SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED("25007"),
        /**
         * An error occurred trying to commit or rollback a transaction.
         */
        INVALID_TRANSACTION_TERMINATION("2D000"),
        /**
         * A <code>Transform Group name</code> could be invalid if it is used
as a qualifier or as the
         * argument of SET TRANSFORM GROUP, and does not refer to an existing
Transform Group or is not
         * a valid <code>identifier</code>.
         */
        INVALID_TRANSFORM_GROUP_NAME_SPECIFICATION("0S000"),
        /**
         * The "locator exception" class identifies exception conditions that
relate to locators: BLOB
         * and CLOB data types, and their values.
         */
        LOCATOR_EXCEPTION("0F000"),
        /**
         * The locator value does not currently represent any value.
         */
        INVALID_LOCATOR_SPECIFICATION("0F001"),
        /**
         * One of the following exceptions occurred:
         *
         * <ol>
         * <li>The result of the SELECT INTO statement or the subselect of
the INSERT statement was an
         * empty table.</li>
         * <li>The number of rows identified in the searched UPDATE or DELETE
statement was zero./<li>
         * <li>The position of the cursor referenced in the FETCH statement
was before the first row or
         * after the last row of the result table.</li>
         * <li>The fetch orientation is invalid.</li>
         * </ol>
         */
        NO_DATA("02000"),
        /**
         * No additional result sets returned.
         */
        NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED("02001"),
        /**
         * The statement is not allowed in a trigger.
         */
        PROHIBITED_STATEMENT_ENCOUNTERED_DURING_TRIGGER("0W000"),
        /**
         * An error occurred while an SQL-client interacted with an SQL-
server across a communications
         * network using an RDA Application Context.
         */
        REMOTE_DATABASE_ACCESS("HZ000"),
        ATTRIBUTE_NOT_PERMITTED("HZ301"),
        AUTHENTICATION_FAILURE("HZ302"),
        DUPLICATE_REQUEST_IDENT("HZ303"),
        ENCODING_NOT_SUPPORTED("HZ304"),
        FEATURE_NOT_SUPPORTED_MULTIPLE_SERVER_TRANSACTIONS("HZ305"),
        INVALID_ATTRIBUTE_TYPE("HZ306"),
        INVALID_FETCH_COUNT("HZ307"),
        INVALID_MESSAGE_TYPE("HZ308"),
        INVALID_OPERATION_SEQUENCE("HZ309"),
        INVALID_TRANSACTION_OPERATION_CODE("HZ310"),
        MISMATCH_BETWEEN_DESCRIPTOR_AND_ROW("HZ311"),
        NO_CONNECTION_HANDLE_AVAILABLE("HZ312"),
        NUMBER_OF_VALUES_DOES_NOT_MATCH_NUMBER_OF_ITEM_DESCRIPTORS("HZ313"),
        TRANSACTION_CANNOT_COMMIT("HZ314"),
        TRANSACTION_STATE_UNKNOWN("HZ315"),
        TRANSPORT_FAILURE("HZ316"),
        UNEXPECTED_PARAMETER_DESCRIPTOR("HZ317"),
        UNEXPECTED_ROW_DESCRIPTOR("HZ318"),
        UNEXPECTED_ROWS("HZ319"),
        VERSION_NOT_SUPPORTED("HZ320"),
        TCPIP_ERROR("HZ321"),
        TLS_ALERT("HZ322"),
        /**
         * An error occurred using a savepoint.
         */
        SAVEPOINT_EXCEPTION("3B000"),
        /**
         * The savepoint is not valid.
         */
        INVALID_SAVEPOINT_SPECIFICATION("3B001"),
        /**
         * The maximum number of savepoints has been reached.
         */
        TOO_MANY_SAVEPOINTS("3B002"),
        /**
         * SQL routine is a procedure or function which is written in SQL.
SQLSTATE class 2F identifies
         * exception conditions that relate to SQL routines. (Exceptions for
non-SQL routines are class
         * 38.)
         */
        SQL_ROUTINE_EXCEPTION("2F000"),
        /**
         * The function did not execute a RETURN statement.
         */
        FUNCTION_EXECUTED_NO_RETURN_STATEMENT("2F005"),
        /**
         * The SQL function attempted to modify data, but the function was
not defined as
         * MODIFIES SQL DATA.
         */
        MODIFYING_SQL_DATA_NOT_PERMITTED_BY_FUNCTION("2F002"),
        /**
         * The statement is not allowed in a function or procedure.
         */
        PROHIBITED_SQL_STATEMENT_ATTEMPTED_BY_FUNCTION("2F003"),
        /**
         * The SQL function attempted to read data, but the function was not
defined as READS SQL DATA.
         */
        READING_SQL_DATA_NOT_PERMITTED("2F004"),
        /**
         * Completion of the operation was successful and did not result in
any type of warning or
         * exception condition.
         */
        SUCCESSFUL_COMPLETION("00000"),
        /**
         * Syntax errors include not just grammar or spelling errors, but
"bind problems" such as
         * failure to find an Object. Access violations are due to lack of
Privileges. A high security
         * DBMS will try to hide from the user whether the problem is "you
don't have access to X" as
         * opposed to "X isn't there"; that's why these two different
categories are lumped together in
         * one SQLSTATE (thus users can't discover what the Table names are
by trying out all the
         * possibilities).
         */
        SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION("42000"),
        /**
         * Invoked a dynamic update or delete statement but the cursor
specification conflicts with the
         * specification of the table it is operating over.
         */
        TARGET_TABLE_DISAGREES_WITH_CURSOR_SPECIFICATION("0T000"),
        /**
         * An error has triggered a rollback the transaction.
         */
        TRANSACTION_ROLLBACK("40000"),
        /**
         * This occurs for COMMIT, if there were deferred Constraints
(deferred Constraints aren't
         * checked until COMMIT time unless SET CONSTRAINTS IMMEDIATE is
executed). So: you asked for
         * COMMIT, and what you got was ROLLBACK. See also SQLSTATE 23000.
         */
        TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION("40002"),
        /**
         * The database engine has detected a deadlock. The transaction of
this session has been rolled
         * back to solve the problem. A deadlock occurs when a session tries
to lock a table another
         * session has locked, while the other session wants to lock a table
the first session has
         * locked. As an example, session 1 has locked table A, while session
2 has locked table B.
         * If session 1 now tries to lock table B and session 2 tries to lock
table A, a deadlock has
         * occurred. Deadlocks that involve more than two sessions are also
possible. To solve deadlock
         * problems, an application should lock tables always in the same
order, such as always lock
         * table A before locking table B. For details, see
         * <a href="http://en.wikipedia.org/wiki/Deadlock";>Wikipedia
Deadlock</a>.
         */
        SERIALIZATION_FAILURE("40001"),
        /**
         * The SQL-Connection was lost during execution of an SQL statement.
         */
        STATEMENT_COMPLETION_UNKNOWN("40003"),
        /**
         * This occurs for COMMIT, if there was a deferred Constraint —
presumably a FOREIGN KEY
         * Constraint unless Triggers are supported by the DBMS — and there
was an attempt to violate the
         * Constraint. See also SQLSTATE 09000, 27000.
         */
        TRIGGERED_ACTION_EXCEPTION_AT_COMMIT("40004"),
        /**
         * A triggered SQL statement failed.
         */
        TRIGGERED_ACTION_EXCEPTION("09000"),
        /**
         * An attempt was made to modify the target table of the MERGE
statement by a constraint or
         * trigger. See also SQLSTATE 09000, 40004.
         */
        TRIGGERED_DATA_CHANGE_VIOLATION("27000"),
        /**
         * The operation completed with a warning.
         */
        WARNING("01000"),
        /**
         * The cursor that was closed has been reopened on the next result
set within the chain.
         */
        ADDITIONAL_RESULT_SETS_RETURNED("0100D"),
        /**
         * The maximum number of elements in the target array is less than
the number of elements in
         * the source array and the extra source elements are all NULL. The
database will assign as many
         * of the source element values to the target elements as is
possible.
         */
        ARRAY_DATA_RIGHT_TRUNCATION_WARNING("0102F"),
        /**
         * The procedure returned too many result sets.
         */
        TOO_MANY_RESULT_SETS("0100E"),
        /**
         * Returned if you DELETE with and without a Cursor in the same
transaction.
         */
        CURSOR_OPERATION_CONFLICT("01001"),
        /**
         * This is the same as warning 01009 except that instead of a search
condition (as in a CHECK
         * clause), you're using a default value.
         */
        DEFAULT_VALUE_TOO_LONG_FOR_INFORMATION_SCHEMA("0100B"),
        /**
         * There was an error during execution of the CLI function
SQLDisconnect, but you won't be able
         * to see the details because the SQLDisconnect succeeded.
         */
        DISCONNECT_ERROR("01002"),
        /**
         * One or more ad hoc result sets were returned from the procedure.
         */
        DYNAMIC_RESULT_SETS_RETURNED("0100C"),
        /**
         * Every descriptor area has multiple IDAs. You need one IDA per
Column of a result set, or one
         * per parameter. Either reduce the number of Columns in the select
list or reduce the number of
         * ?s in the SQL statement as a whole.
         */
        INSUFFICIENT_ITEM_DESCRIPTOR_AREAS("01005"),
        /**
         * Null values were eliminated from the argument of a column
function.
         */
        NULL_VALUE_ELIMINATED_IN_SET_FUNCTION("01003"),
        /**
         * A privilege was not granted.
         */
        PRIVILEGE_NOT_GRANTED("01007"),
        /**
         * A privilege was not revoked.
         */
        PRIVILEGE_NOT_REVOKED("01006"),
        /**
         * This is the same as warning 01009 except that instead of a search
condition (as in a CHECK
         * clause), you're using a query condition (usually SELECT). Thus, if
you say "CREATE VIEW ..."
         * with a very long query, the size of Column VIEW_DEFINITION in View
VIEWS in INFORMATION_SCHEMA
         * is a limiting factor.
         */
        QUERY_EXPRESSION_TOO_LONG_FOR_INFORMATION_SCHEMA("0100A"),
        /**
         * Suppose you say "CREATE TABLE ... CHECK (<condition>)", and the
length of <condition> is
         * larger than what can be stored in the INFORMATION_SCHEMA View,
CHECK_CONSTRAINTS, in its
         * CHECK_CLAUSE Column. The Table will still be created — this
warning only means you won't be
         * able to see the entire information about the Table when you look
at INFORMATION_SCHEMA. See
         * also SQLState 0100A and 0100B.
         */
        SEARCH_CONDITION_TOO_LONG_FOR_INFORMATION_SCHEMA("01009"),
        /**
         * Returned if the character representation of the triggered SQL
statement cannot be represented
         * in the Information Schema without truncation.
         */
        STATEMENT_TOO_LONG_FOR_INFORMATION_SCHEMA("0100F"),
        /**
         * The value of a string was truncated when assigned to another
string data type with a shorter
         * length.
         */
        STRING_DATA_RIGHT_TRUNCATION_ON_READ("01004"),
        /**
         * The INSERT or UPDATE is not allowed, because a resulting row does
not satisfy the view
         * definition.
         */
        WITH_CHECK_OPTION_VIOLATION("44000");
        private static final Map<String, SQLState> codeToEnum =
Maps.newHashMap();
        private final String code;

        /**
         * Creates a new SQLState.
         *
         * @param code the 5-character SQLState code
         */
        SQLState(String code)
        {
                this.code = code;
                assert (code.length() == 5): code;
        }

        static
        {
                for (SQLState value: values())
                        codeToEnum.put(value.getCode(), value);
        }

        /**
         * Returns the code associated with the enum.
         *
         * @return the code
         */
        public String getCode()
        {
                return code;
        }

        /**
         * Returns the SQLState associated with the specified code.
         *
         * @param code the code (5 characters)
         * @return the SQLState
         * @throws IllegalArgumentException if no enum value is associated
with the specified code
         */
        public static SQLState fromCode(String code)
        {
                SQLState result = codeToEnum.get(code);
                if (result == null)
                        throw new IllegalArgumentException(code);
                return result;
        }

        /**
         * Returns the SQLState category.
         *
         * @return the SQLState category
         */
        public Category getCategory()
        {
                try
                {
                        return Category.fromCode(code.substring(0, 2));
                }
                catch (IllegalArgumentException e)
                {
                        throw new AssertionError(e);
                }
        }

        public enum Category
        {
                /**
                 * If the statement contains a preparable dynamic cursor name 
that
is ambiguous.
                 */
                AMBIGUOUS_CURSOR_NAME("3C"),
                /**
                 * Attempted to assign a value to a non-updatable column.
                 */
                CANNOT_ASSIGN_TO_NON_UPDATABLE_COLUMN("0U"),
                /**
                 * If any object column is directly or indirectly referenced in 
the
<code>order by</code> clause
                 * of a dynamic cursor definition.
                 */
                CANNOT_ASSIGN_TO_ORDERING_COLUMN("0V"),
                /**
                 * The result of a SELECT INTO, scalar fullselect, or subquery 
of a
basic predicate returned more
                 * than one value.
                 */
                CARDINALITY_VIOLATION("21"),
                /**
                 * Unable to establish a database connection.
                 */
                CONNECTION_EXCEPTION("08"),
                /**
                 * The "cursor sensitivity exception" class identifies exception
conditions that relate to Cursors
                 * and their sensitivity attribute.
                 */
                CURSOR_SENSITIVITY_EXCEPTION("36"),
                /**
                 * The specified data was inappropriate for the column type.
                 */
                DATA_EXCEPTION("22"),
                /**
                 * Attempted to "REVOKE GRANT OPTION FOR" with dependent 
privileges
and without a "CASCADE".
                 */
                DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST("2B"),
                /**
                 * An error occurred while invoking a diagnostics function.
                 */
                DIAGNOSTICS_EXCEPTION("0Z"),
                /**
                 * An error occurred while executing dynamic SQL.
                 */
                DYNAMIC_SQL_ERROR("07"),
                /**
                 * An error occurred executing an external routine.
                 *
                 * External routines are stored procedures implemented by 
non-SQL
languages (i.e. Java).
                 */
                EXTERNAL_ROUTINE_EXCEPTION("38"),
                /**
                 * An error occurred before or after invoking an external 
routine.
                 *
                 * External routines are stored procedures implemented by 
non-SQL
languages (i.e. Java).
                 */
                EXTERNAL_ROUTINE_INVOCATION_EXCEPTION("39"),
                /**
                 * The specified feature is not supported.
                 */
                FEATURE_NOT_SUPPORTED("0A"),
                /**
                 * The operation violated a table constraint.
                 */
                INTEGRITY_CONSTRAINT_VIOLATION("23"),
                /**
                 * Authorization name is invalid.
                 */
                INVALID_AUTHORIZATION_SPECIFICATION("28"),
                /**
                 * A <code>Catalog name</code> could be invalid if it is used 
as a
qualifier or as the
                 * argument of SET CATALOG, and does not refer to an existing
Catalog or is not a valid
                 * <code>identifier</code>.
                 */
                INVALID_CATALOG_NAME("3D"),
                /**
                 * Presumably an invalid Character set name would be one that 
begins
with a digit, contains a
                 * non-Latin letter, etc.
                 */
                INVALID_CHARACTER_SET_NAME("2C"),
                /**
                 * With embedded SQL, you get this by saying "GET DIAGNOSTICS
EXCEPTION 0". With the CLI, you get
                 * this by calling SQLGetDiagRec or SQLGetDiagField with a
RecordNumber parameter less than 1.
                 * If RecordNumber is greater than the number of status 
records, you
don't get this error.
                 * Instead, you get an NO_DATA return code.
                 */
                INVALID_CONDITION_NUMBER("35"),
                /**
                 * For a CONNECT statement, the argument must be a valid
<code>identifier</code>.
                 */
                INVALID_CONNECTION_NAME("2E"),
                /**
                 * Cursor name is invalid.
                 */
                INVALID_CURSOR_NAME("34"),
                /**
                 * The cursor is closed or has no current row.
                 */
                INVALID_CURSOR_STATE("24"),
                /**
                 * The specified grantor may not GRANT access.
                 */
                INVALID_GRANTOR("0L"),
                /**
                 * Invalid role specification. The specified role does not 
exist or
is not granted to the
                 * specified user.
                 */
                INVALID_ROLE_SPECIFICATION("0P"),
                /**
                 * The schema (collection) name is invalid.
                 */
                INVALID_SCHEMA_NAME("3F"),
                /**
                 * An error occurred while specifying Schema paths.
                 */
                INVALID_SCHEMA_NAME_LIST_SPECIFICATION("0E"),
                /**
                 * A <code>Collation name</code> could be invalid if it is used 
as a
qualifier or as the
                 * argument of SET COLLATION, and does not refer to an existing
Collation or is not a valid
                 * <code>identifier</code>.
                 */
                INVALID_COLLATION_NAME("2H"),
                /**
                 * Returned if, in embedded SQL, you use "EXECUTE ... USING
DESCRIPTOR 'X';", a descriptor named
                 * X must exist.
                 */
                INVALID_SQL_DESCRIPTOR_NAME("33"),
                /**
                 * Returned if the SQL-session context of the current 
SQL-session
does not include a result set
                 * sequence brought into existence by an invocation of 
SQL-invoked
procedure by the active
                 * SQL-invoked routine.
                 */
                INVALID_SQL_INVOKED_PROCEDURE_REFERENCE("0M"),
                /**
                 * Probable cause: you failed to PREPARE an SQL statement and 
now
you are trying to EXECUTE it.
                 */
                INVALID_SQL_STATEMENT_NAME("26"),
                /**
                 * Attempted to refer to a statement that should have been 
prepared,
but was not.
                 */
                INVALID_SQL_STATEMENT_IDENTIFIER("30"),
                /**
                 * An error occurred specifying a target for data.
                 */
                INVALID_TARGET_TYPE_SPECIFICATION("0D"),
                /**
                 * The operation violated transaction constraints.
                 */
                INVALID_TRANSACTION_STATE("25"),
                /**
                 * An error occurred trying to commit or rollback a transaction.
                 */
                INVALID_TRANSACTION_TERMINATION("2D"),
                /**
                 * A <code>Transform Group name</code> could be invalid if it is
used as a qualifier or as the
                 * argument of SET TRANSFORM GROUP, and does not refer to an
existing Transform Group or is not
                 * a valid <code>identifier</code>.
                 */
                INVALID_TRANSFORM_GROUP_NAME_SPECIFICATION("0S"),
                /**
                 * The "locator exception" class identifies exception conditions
that relate to locators: BLOB
                 * and CLOB data types, and their values.
                 */
                LOCATOR_EXCEPTION("0F"),
                /**
                 * The operation did not return any data.
                 */
                NO_MORE_DATA("02"),
                /**
                 * The statement is not allowed in a trigger.
                 */
                PROHIBITED_STATEMENT_ENCOUNTERED_DURING_TRIGGER("0W"),
                /**
                 * An error occurred while an SQL-client interacted with an SQL-
server across a communications
                 * network using an RDA Application Context.
                 */
                REMOTE_DATABASE_ACCESS("HZ"),
                /**
                 * An error occurred using a savepoint.
                 */
                SAVEPOINT_EXCEPTION("3B"),
                /**
                 * SQL routine is a procedure or function which is written in 
SQL.
SQLSTATE class 2F identifies
                 * exception conditions that relate to SQL routines. 
(Exceptions for
non-SQL routines are class
                 * 38.)
                 */
                SQL_ROUTINE_EXCEPTION("2F"),
                /**
                 * Completed successfully.
                 */
                SUCCESS("00"),
                /**
                 * Syntax errors include not just grammar or spelling errors, 
but
"bind problems" such as
                 * failure to find an Object. Access violations are due to lack 
of
Privileges. A high security
                 * DBMS will try to hide from the user whether the problem is 
"you
don't have access to X" as
                 * opposed to "X isn't there"; that's why these two different
categories are lumped together in
                 * one SQLSTATE (thus users can't discover what the Table names 
are
by trying out all the
                 * possibilities).
                 */
                SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION("42"),
                /**
                 * Invoked a dynamic update or delete statement but the cursor
specification conflicts with the
                 * specification of the table it is operating over.
                 */
                TARGET_TABLE_DISAGREES_WITH_CURSOR_SPECIFICATION("0T"),
                /**
                 * An error has triggered a rollback the transaction.
                 */
                TRANSACTION_ROLLBACK("40"),
                /**
                 * A triggered SQL statement failed.
                 */
                TRIGGERED_ACTION_EXCEPTION("09"),
                /**
                 * An attempt was made to modify the target table of the MERGE
statement by a constraint or
                 * trigger. See also SQLSTATE 09000, 40004.
                 */
                TRIGGERED_DATA_CHANGE_VIOLATION("27"),
                /**
                 * Completed with a warning.
                 */
                WARNING("01"),
                /**
                 * The INSERT or UPDATE is not allowed, because a resulting row 
does
not satisfy the view
                 * definition.
                 */
                WITH_CHECK_OPTION_VIOLATION("44");
                private final String code;
                private static final Map<String, Category> codeToEnum =
Maps.newHashMap();

                /**
                 * Creates a new Category.
                 *
                 * @param code the 2-character Category code
                 */
                Category(String code)
                {
                        this.code = code;
                        assert (code.length() == 2): code;
                }

                static
                {
                        for (Category value: values())
                                codeToEnum.put(value.getCode(), value);
                }

                /**
                 * Returns the code associated with the enum.
                 *
                 * @return the code
                 */
                public String getCode()
                {
                        return code;
                }

                /**
                 * Returns the Category associated with the specified code.
                 *
                 * @param code the category code (2 characters)
                 * @return the Category
                 * @throws IllegalArgumentException if no enum value is 
associated
with the specified code
                 */
                public static Category fromCode(String code)
                {
                        Category result = codeToEnum.get(code);
                        if (result == null)
                                throw new IllegalArgumentException(code);
                        return result;
                }
        };
}
-------------------------------

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to