gpt4 book ai didi

java - 生成数据库错误以进行异常处理的方法

转载 作者:行者123 更新时间:2023-12-01 14:38:35 25 4
gpt4 key购买 nike

我正在编写java代码来使用JPA进行数据库操作。即 getTransaction、getResultList、setFirstResult、setMaxResults、begin、commit、flush、clear、...

我的问题是,即使我可以将代码包装在 try catch block 中,我仍然需要生成异常的方法来测试我的代码是否有效。

您将如何生成数据库错误来测试您的异常处理?当程序运行时,一些SQL命令在java之外的数据库上同时运行?我的目标数据库是 SQL Server 2008 R2。

有关锁定和“StaleObjectStateException:行已被另一个更新或删除...”等常见错误的示例将不胜感激。

谢谢!

最佳答案

对于 StaleObjectStateSession,您可以编写一个 JUnit 测试用例,例如

e1 = session1.load(key);
e2 = session2.load(key);
e2.modifyAnything();
e2.update();
e2.commit();
e1.modifyAnything();
e1.update();

然后你就会得到异常(exception)。顺便说一下,StaleObjectStateSession 是一个 Hibernate 异常,而不是数据库异常。

为了测试真实的数据库异常,您可以违反数据库约束,例如编写一个 JUnit 情况,其中插入一行,该行的主键已存在或在声明为 NOT NULL 的列中具有空值数据库。

如果您只想测试一次并且希望避免编写 JUnit 测试用例的工作,那么您可以使用 eclipse 调试和 SQL 操作来完成:

您在代码中记录的加载和提交之间设置了断点。当到达断点时,在 SQL 中,您可以使用 DELETE FROM table WHERE Primary_key =... 手动删除此记录,并在继续执行之前提交此修改。 (或者,您可以UPDATE该行,但不要忘记也更新版本列。)然后在 Eclipse 中继续执行程序。

另一个想法是使用 ALTER TABLE table MODIFY(column ... NOT NULL) 暂时将可空列设置为非空。测试后您必须撤消此修改。当然,这样的测试只能在专用的测试数据库上完成,而不是在生产系统上完成。

关于java - 生成数据库错误以进行异常处理的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16227140/

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