java - 是否可以在程序中捕获 SQL 约束违规异常?

标签 java mysql exception

这个问题太基础了。但我需要了解处理数据库时编程的道德方法。 假设我有一个名为 Client 的表,其 id 列充当其他表(例如 Orders)中的外键。 如果我尝试从 Client 删除一行,它会抛出一个

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException

现在,如果我在生产环境中工作并且抛出约束违反异常,那么捕获它是否符合道德方法?或者我必须做一些 native 编码来捕获此类约束并避免调用删除函数?我对此真的很陌生。任何建议都会很棒。

最佳答案

没有简单绝对的答案。这取决于用户的需求。

一般来说,如果您打算恢复并继续处理,则应该捕获异常。您想要这样做的原因可能有很多。例如,某些错误可能是暂时的,这意味着如果稍等一下就可能成功(例如网络错误)。在这种情况下,捕获异常并等待一段时间后重试是合理的。或者,如果您的应用程序是游戏,即使出现错误,继续下去可能会更有利(因为即使您的应用程序表现不佳,它也不会造成严重损害 - 在这种情况下,您可能需要继续 . on)并希望该错误不会对游戏玩法产生太大影响)。

在其他情况下,最好终止处理(甚至应用程序)。例如,如果您正在执行批处理作业并且发生断言异常(因为您设置的假设已被违反),那么通常最好使作业失败,以便人们可以进行调查(而不是让它继续下去并可能让错误发生)结果会被忽视并在以后引起更大的问题)。

现在,回到您的示例,这取决于上下文。在不了解您的上下文的情况下,我可能会建议捕获它并向用户显示解决方案(“您必须先删除客户端 X 的所有订单,然后才能删除此客户端!”等)。但你必须根据你对业务情况的分析来自行判断。

关于java - 是否可以在程序中捕获 SQL 约束违规异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58247928/

相关文章:

mysql - EntityFramework异常: How can i see the real query

c# - 如何在 C# 中安全地创建 mysql 数据库

python - 在多进程中处理异常

java - RuntimeException 的代码中的哪些内容使其不受检查?

java - 如何在 Java 中记录异常

java - hibernate transient 成员的默认值

java - 使用maven制作webapp的问题

c# - 是否可以将多个数据保存到数据库列

java - Java 中的自动 Unicode 字符串格式化

java - 为什么这个 Spring 测试试图 Autowiring 它不应该看到的 bean?