Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种与数据库无关的方法来确定JDBC中常见的SQL错误?_Java_Database_Jdbc - Fatal编程技术网

Java 是否有一种与数据库无关的方法来确定JDBC中常见的SQL错误?

Java 是否有一种与数据库无关的方法来确定JDBC中常见的SQL错误?,java,database,jdbc,Java,Database,Jdbc,我正在JDBC之上实现一个轻量级ORM层,用于几种不同的数据库实现 是否有一种与数据库无关的方法来确定常见的SQL错误 (例如……) 外键违规 唯一违反 检查违规行为 检测到死锁 使用PostgreSQL,可以通过SQLException#getSQLState()来识别这些错误代码,但是这些错误代码与MySQL中相应的错误代码不匹配 尽管最好采用一般方法解决问题,但似乎需要特定于驱动程序的解决方案。管理此问题。他们已经做了让你更容易的工作。查看它的JDBC包 Spring不久前由VMWar

我正在JDBC之上实现一个轻量级ORM层,用于几种不同的数据库实现

是否有一种与数据库无关的方法来确定常见的SQL错误

(例如……)

  • 外键违规
  • 唯一违反
  • 检查违规行为
  • 检测到死锁
使用PostgreSQL,可以通过
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的话。在我们找到合适的解决方案或自行实施之前,我将保留这个问题。我会投你应得的赞成票,因为你的建议是正确的。