SQLException.getSQLState的所有可能值是什么?

时间:2009-09-09 13:03:54

标签: java sql exception jdbc

SQLException.getSQLState检索SQLState对象的SQLException。此方法可以返回的所有可能值是什么?我可以使用该值来识别数据库中存在的特定错误(即,此值是否可以告诉我它是PK违规,还是唯一约束,还是列值大等)?

此外,DatabaseMetaData.getSQLStateType()方法应该指示SQLSTATE返回的SQLException.getSQLState是X / Open(现在称为Open Group)SQL CLI还是SQL99。唯一可能的值应该是DatabaseMetaData.sqlStateXOpen == 1DatabaseMetaData.sqlStateSQL99 == 2,但我得到的值为0。我错过了什么吗?

有没有办法可以使用上述方法的组合来确定DB中发生的特定错误类型?我可以依靠SQLException.getSQLState的值吗?这些值是否与数据库提供程序不同?数据库提供程序?

4 个答案:

答案 0 :(得分:5)

MySQL在Server Error Codes and Messages

的参考手册中提供了一些信息

答案 1 :(得分:3)

包括SQLStates的官方文档显然可以以相对较高的价格从ANSI和XOpen购买。 但是,大多数数据库的文档都有SQLStates列表。可能最完整(和可访问)的在线列表在DB2手册中。例如,检查DB2 Universal Messages manual。 Oracle(需要TechNet密码)和Sybase等也有在线列表。

关于第二个问题,这是SQLState的意图,但是,各种数据库都有不同程度的合规性。例如,有些将多个本机错误消息映射到同一个SQLState。对于通用用途,可能应该专注于主要代码(SQLState的前两个字符),然后确定次要代码中是否有更多特定信息(超过000)。

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

答案 2 :(得分:2)

X / Open(现在开放组)标准现在免费提供(但需要注册)。有关SQL CLI(又称ODBC)标准,请参阅Data Management: SQL Call Level Interface (CLI),SQLSTATE代码在附录A中定义。对于SQL标准,Data Management: Structured Query Language (SQL), Version 2,SQLSTATE代码在附录B中定义。至于ISO标准,你必须支付官方版本,最终的草稿(几乎相同)是免费提供的;对于SQL:2011,请参阅Final Committee Draft ISO/IEC FCD 9075-2的第2017页(按PDF编号; 1194按文档页码编号)

答案 3 :(得分:1)

这在某种程度上依赖于JDBC驱动程序。似乎有标准值,加上一些专有值。

作为可能的指南,Spring的JDBC层包括SQL错误代码和状态转换。它提供了SQLState translator,它提供了相当模糊的异常转换,以及使用已知的专有错误代码更精细的SQLErrorCode translator

如果你不能使用Spring,那么下载源代码,并提取sql-error-codes.xml文件,其中包含从代码到异常类型的映射。