2012-01-27 35 views
3

我依靠数据库告诉我是否存在违反唯一性的情况,所以我想知道何时发生的异常是某种违反约束的情况。它看起来像这正是我需要的:java.sql.SQLNonTransientException如何确定java中的数据库约束违规?

但它是新的1.6,我不确定我的数据库驱动程序是否足够新。我使用了许多DBMS并拥有许多客户端,因此依靠驱动程序更新是很困难的。

是否有一种通用的方法来检查这个pre-java 1.6而不是搜索异常消息的“约束”?

回答

9

不,没有一般的机制。这取决于您使用的数据库和JDBC驱动程序。

SQLExceptiongetErrorCodegetSQLState返回可用于确定给定异常的良好含义的信息的方法,但您必须使其特定于驱动程序+数据库。

Spring uses those same indications and a database-specific lookup table to translate SQLException into its own database-agnostic hierarchy of exceptions。你可以使用它,或者至少看看它的酸性代码,看看它是如何工作的。

+0

感谢您的帮助,你说的是我预期的,即没有供应商中立的方式来做到这一点。我可以用丑陋的方式处理它,我只是想看看它有多难看。再次感谢! – rjcarr 2012-01-27 08:30:31

1

一般来说:不要指望数据库驱动程序总是返回'正确'的异常。这可能是更好地检查:(!取决于驱动程序)

  • 的SQL状态
  • 供应商代码
  • 实际的消息文本
+1

我不会依赖消息文本,因为某些(大多数?)驱动程序可能会根据客户端的区域设置返回本地化的错误文本。 – 2012-01-27 08:27:16

+0

@a_horse_with_no_name你说得对(非常讨厌本地化btw :) – 2012-01-27 09:06:42