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
的值吗?这些值在数据库提供者之间是否有所不同?
最佳答案
显然,可以从ANSI和XOpen中以相对较高的价格购买包括SQLStates的正式文档。
但是,大多数数据库的文档都有SQLState的列表。 DB2手册中可能是最完整(可访问的)在线 list 。例如,检查DB2 Universal Messages manual。 Oracle(需要TechNet密码)和Sybase等也有在线列表。
关于第二个问题,这是SQLState的意图,但是,各种数据库具有不同程度的合规性。例如,某些将多个 native 错误消息映射到同一SQLState。对于一般用途,可能应该专注于主要代码(SQLState的前两个字符),然后确定次要代码(大于000)中是否有更具体的信息。
http://www.jguru.com/faq/view.jsp?EID=46397
关于java - SQLException.getSQLState的所有可能值是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1399574/