Каковы все возможные значения для SQLException.getSQLState?

SQLException.getSQLState извлекает SQLState для объекта SQLException. Каковы все возможные значения, которые могут быть возвращены этим методом? Могу ли я использовать значение для определения конкретных ошибок, которые были обнаружены в базе данных (т.е. Может ли это значение сказать мне, было ли это нарушение PK или уникальное ограничение или значение столбца для больших и т.д.)?

Кроме того, предполагается, что метод DatabaseMetaData.getSQLStateType() указывает, возвращает ли SQLState, возвращаемый SQLException.getSQLState, X/Open (теперь называемый Open Group) SQL CLI или SQL99. Единственное возможное значение для этого должно быть DatabaseMetaData.sqlStateXOpen == 1 и DatabaseMetaData.sqlStateSQL99 == 2, но я получаю значение 0. Я что-то пропустил?

Есть ли способ определить конкретный тип ошибки, который произошел в БД, используя комбинации из вышеупомянутых методов? Могу ли я рассчитывать на значения SQLException.getSQLState? Являются ли эти значения разными от поставщика БД до поставщика БД?

Ответ 1

Официальные документы, включающие SQLStates, могут быть приобретены, по относительно высокой цене, из ANSI и XOpen. Но в документации для большинства баз данных есть списки SQLStates. Вероятно, наиболее полные (и доступные) онлайн-списки приведены в руководствах DB2. Например, Руководство по универсальным сообщениям DB2. Oracle (требуется пароль TechNet) и Sybase, среди прочих, также имеют онлайн-списки.

Что касается второго вопроса, это намерение SQLState, однако различные базы данных имеют разную степень соответствия. Например, некоторые отображают несколько собственных сообщений об ошибках одному и тому же SQLState. Для общего использования следует, вероятно, сосредоточиться на основном коде (первые два символа SQLState), а затем определить, доступна ли более подробная информация в младшем коде (за пределами 000.)

http://www.jguru.com/faq/view.jsp?EID=46397

Ответ 3

Стандарты X/Open (теперь Open Group) теперь доступны бесплатно (но требуется регистрация). См. Управление данными: интерфейс уровня SQL (CLI) для стандарта SQL CLI (aka ODBC), коды SQLSTATE определены в Приложении A. И Управление данными: язык структурированных запросов (SQL), версия 2 для стандарта SQL, коды SQLSTATE определены в приложении B. Что касается стандартов ISO, в то время как вы должны оплачивать официальные версии, окончательные черновики (которые почти идентичны) свободно доступны; для SQL: 2011, см. стр. 2017 (по нумерации PDF, 1194 по нумерации страниц) Итоговый проект проекта ISO/IEC FCD 9075-2

Ответ 4

В некоторой степени это зависит от драйвера JDBC. Кажется, что это стандартные значения, а также некоторые собственные значения.

В качестве руководства к тому, что возможно, уровень Spring JDBC включает код ошибки SQL и перевод состояния. Он предоставляет SQLState translator, который дает довольно смутный перевод исключений, а также Переводчик SQLErrorCode, который намного более мелкозернистый, используя известные проприетарные коды ошибок.

Если вы не можете использовать Spring, загрузите исходный код и извлеките файл sql-error-codes.xml, который содержит сопоставление от кодов к типам исключений.