我依靠数据库告诉我是否存在唯一性违规,所以我想知道我得到的异常何时是某种约束违规。看起来这正是我所需要的:java.sql.SQLNonTransientException
但它是1.6的新手,我不相信我的数据库驱动程序是新的。我使用了很多DBMS并拥有很多客户端,所以依赖驱动程序是最新的很难。
除了搜索“约束”的异常消息之外,是否有通用的方法来检查这个pre-java 1.6?
答案 0 :(得分:10)
不,没有一般的机制。它取决于您使用的数据库和JDBC驱动程序。
SQLException
有getErrorCode
和getSQLState
方法返回可用于确定给定异常的精细含义的信息,但您必须使其特定于驱动程序+数据库中。
Spring uses those same indications and a database-specific lookup table to translate SQLException
into its own database-agnostic hierarchy of exceptions。你或许可以使用它,或者至少查看它的酸性代码,看看它是如何工作的。
答案 1 :(得分:2)
通常:不要指望数据库驱动程序始终返回“正确”的异常。最好检查一下: