gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:18:03 26 4
gpt4 key购买 nike

背景

  • 我正在使用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。
  • 我不知道您所说的“可恢复错误”是什么意思,但是死锁显然不是持久性错误-如果您重复事务,它可能会成功。
    另一方面,违反约束是持续的错误。重试所需的次数,将始终出现相同的错误。 “恢复”的唯一方法是运行其他语句或修改数据库以避免冲突。
  • 关于java - 如何使用RDBMS DML创建任意错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63473041/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com