Java 是否有一种与数据库无关的方法来确定JDBC中常见的SQL错误?
我正在JDBC之上实现一个轻量级ORM层,用于几种不同的数据库实现 是否有一种与数据库无关的方法来确定常见的SQL错误 (例如……)Java 是否有一种与数据库无关的方法来确定JDBC中常见的SQL错误?,java,database,jdbc,Java,Database,Jdbc,我正在JDBC之上实现一个轻量级ORM层,用于几种不同的数据库实现 是否有一种与数据库无关的方法来确定常见的SQL错误 (例如……) 外键违规 唯一违反 检查违规行为 检测到死锁 使用PostgreSQL,可以通过SQLException#getSQLState()来识别这些错误代码,但是这些错误代码与MySQL中相应的错误代码不匹配 尽管最好采用一般方法解决问题,但似乎需要特定于驱动程序的解决方案。管理此问题。他们已经做了让你更容易的工作。查看它的JDBC包 Spring不久前由VMWar
- 外键违规
- 唯一违反
- 检查违规行为
- 检测到死锁
SQLException#getSQLState()
来识别这些错误代码,但是这些错误代码与MySQL中相应的错误代码不匹配
尽管最好采用一般方法解决问题,但似乎需要特定于驱动程序的解决方案。管理此问题。他们已经做了让你更容易的工作。查看它的JDBC包
Spring不久前由VMWare购买,但他们仍将其框架作为开放源代码提供。虽然Spring框架中的解决方案对已知SQL错误的分类有一定的支持,但该解决方案分层严重,而且部分不正确 我们觉得需要一个定制的实现,并提出了一个轻量级Java ORM的方言特定元素。数据基于特定版本的SQL引擎的测试。其他版本的发动机可能在错误表示方面有所不同,一些发动机尚未检查
注意不幸的是,JDBC中没有与数据库无关的SQL错误分类替代方案。SQLSTATE值应该独立于供应商,因为它们是在SQL标准(ISO/IEC 9075)中定义的。但并非所有数据库管理系统都遵守该标准。我想您需要自己进行一些映射(供应商SQLCODE到一些内部编号),SQL状态在某些实现中根本无法使用。似乎错误代码和SQL状态的混合是弥补这一差距的最低限度。这就是我所说的应该;)除了ISO/IEC 9075中定义的SQL状态外,供应商还可以定义自己的SQL状态(通常用于标准之外的情况)来完成回答。我们已经研究了它们对转换的表示,它使用由产品名称确定的SQLException.getErrorCode()或SQLException.getSQLState()。Spring解决方案对错误进行了非常粗略的分类,并且实现是分层的。因此,虽然它不适合我们的轻量级产品,但对于其他具有相同意图的产品来说,它可能已经足够了,特别是如果他们已经依赖Spring的话。在我们找到合适的解决方案或自行实施之前,我将保留这个问题。我会投你应得的赞成票,因为你的建议是正确的。