首页 > 解决方案 > 是否可以在程序中捕获 SQL 约束冲突异常?

问题描述

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

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException

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

标签: javamysqlexception

解决方案


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

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

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

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


推荐阅读