java - 是否可以在程序中捕获 SQL 约束冲突异常?
问题描述
不过这个问题太基础了。但是在处理数据库时,我需要了解编程的道德方法。比如说,我有一个表名Client
,它的列在其他表(比如)id
中充当外键。Orders
如果我尝试从中删除一行,Client
我会
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException
现在,如果我在生产环境中工作并且抛出了违反约束的异常,那么捕获它是否符合道德规范?或者我必须做一些本机编码来捕捉这些约束并避免调用删除函数?我对此真的很陌生。任何建议都会很棒。
解决方案
没有简单的绝对答案。这取决于用户的需要。
通常,如果您打算恢复并继续处理,您应该捕获异常。您想要这样做的原因可能有很多。例如,某些错误可能是暂时的,这意味着如果您稍等片刻(如网络错误),您可能会成功。在这种情况下,捕获异常并在等待一段时间后重试是合理的。或者,如果您的应用程序是一个游戏,那么即使出现错误,继续运行可能会更有益(因为即使您的应用程序表现不佳,它也不会造成严重的伤害 - 在这种情况下,您可能需要继续 .on并希望错误不会对游戏玩法产生太大影响)。
在其他情况下,最好终止处理(甚至是应用程序)。例如,如果您正在执行批处理作业并且发生断言异常(因为您设置的假设已被违反),那么最好让作业失败以便进行调查(而不是让它继续并可能出错结果被忽视并在以后引起更大的问题)。
现在,回到您的示例,这取决于上下文。在不了解您的上下文的情况下,我可能会建议抓住它并向用户显示解决方案(“您必须先删除客户端 X 的所有订单,然后才能删除此客户端!”等)。但是您必须根据对业务情况的分析来自己判断。
推荐阅读
- r - ggplot2 - 拆分一个图例(两个色标)并删除另一个
- sql - 尝试查找 Oracle SQL 中状态字段更改的最近日期
- javascript - Axios + Electron.js 错误:`xhr.js:120 Refused to set unsafe header "user-agent"`
- symfony4 - Symfony 4:将供应商捆绑为“自己的捆绑”以轻松开发?
- java - 同一实体错误的多种表示
- c# - 不确定如何正确地将数据提取到包含字符串、int 和 double 属性的类列表中
- python - 如何从烧瓶启动和停止子进程
- php - 外键约束的格式不正确。你能帮助我吗?
- c# - 如何使用正文表单数据在 Xamarin C# url 中获取数据
- azure - 在 Powershell 中获取 Azure HybridWorker 环境变量