微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用RDBMS DML创建任意错误

如何解决如何使用RDBMS DML创建任意错误

背景

  • 我正在使用RDBMS编写Java应用程序。
  • 该应用程序使用Oracle和Postgresql作为数据存储。

问题

现在,我正在测试一些sqlException的错误处理例程。例如,我想将ORA-00001(违反唯一约束)或ORA-00054(无法获得排他锁)视为可恢复的错误。另一方面,我想将ORA-00060(死锁)视为不可恢复的错误

现在,我正在尝试为此错误处理例程编写JUnit测试用例。为了使测试用例尽可能地可移植,我正在寻找一种使用像SELECT RAISE_ERROR(-54) FROM DUAL这样的简单DML生成任意错误(ORA-00001,ORA-00054等)的方法。另外,我想避免在测试用例中模拟sqlException本身,因为在RDBMS版本之间可以更改sqlException的内容

问题

是否有任何方法可以在RDBMS(特别是Oracle和Postgresql)中使用DML创建任意sql错误?或者,是否有像DBUnit这样的测试框架具有创建任意sqlException的功能?如果没有特定的表和记录就可能发生错误,这是可取的。

解决方法

没有一种可移植的方法来人为地导致SQL中的给定错误,您必须为每个数据库编写代码。

但我想给您一些一般性建议:

  • 使用标准化的SQLSTATE而非系统特定的错误代码,例如Oracle的ORA-xxxxx号。那应该是便携式的。

    所有RDBMS应该都有一种方法来检索错误消息的SQLSTATE。

  • 我不知道您所说的“可恢复错误”是什么意思,但是死锁显然不是持久性错误-如果您重复事务,它可能会成功。

    另一方面,违反约束是持续存在的错误。重试所需的次数,将始终出现相同的错误。 “恢复”的唯一方法是运行其他语句或修改数据库以避免冲突。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。