查找是否因为重复而抛出了SQLException

fer*_*rro 11 java sql exception

我有一个与数据库无关的Java程序,我需要知道,在插入时,如果由于重复键而抛出了SQLException.

如果我使用单个数据库驱动程序,我只会使用ErrorCode,但由于我可以使用非常不同的引擎,因此ErrorCode不一样.

有没有人这样做过?有任何想法吗?

很多TIA!

编辑:我有一个配置文件,我存储驱动程序类(即:org.apache.derby.jdbc.ClientDriver)和一些其他所需的信息(即:用户名,密码,网址...).连接总是作为"java.SQL.Connection"传递,所以我真的不关心使用什么驱动程序.

Mat*_*nit 9

这正是SQLException.getSQLState()的用途.根据Google的说法,"23000"表示至少在MySQL,PostgreSQLOracle中存在唯一的约束违规.


ken*_*418 7

使用基本的JDBC,实际上没有办法以跨数据库的方式执行您所说的内容.如前所述,可以使用getErrorCode,但需要特定于供应商的错误代码.

我认为解决这个问题的唯一三种方法是:

  1. 使用某种框架来完成从错误代码到有意义异常的所有转换(Hibernate可能会这样做,其他人提到Spring会这样做)
  2. 在插入之前手动检查重复(使用选择).(这不是100%,因为技术上可能有人可能在您的查询后完成插入).
  3. 在插入上获得任何sql异常后,尝试查询该id.如果您确实可以找到匹配项 - 您可以相当确定您收到的错误是由于重复的主键造成的.(虽然它可能存在多个问题,而实际上并不是那个被抛出的问题).

我的建议是编写代码以尽可能避免问题,然后(如果绝对必要)使用#3.