繁体   English   中英

所有RuntimeException / Unchecked异常倡导者,您将如何处理这种情况?

[英]All RuntimeException / Un-checked exception advocates, how would you handle this scenario?

场景:

对于需要基于用户ID注册的网站,该用户ID必须是唯一的。 假设某个用户尝试使用“ foo”用户ID注册,该用户ID已经存在(使用其他必填字段)。 现在,在不使用检查异常的情况下(数据库API将抛出SQLException进行重复插入),我想知道非检查异常的拥护者如何处理这种情况,并使用户知道已经选择了ID?

假设该网站位于Struts上(不,不,我不在一个项目上,只是因为我对它的了解更好)。 用户将填充的信息提交给Struts Action,后者调用DAO插入新记录。 因此,最终,DAO将发出INSERT语句,该语句将失败。 因此,如果Action(调用DAO)没有明确处理这种情况(DAO方法可能只声明它抛出SQLException或方法可能捕获SQLException并抛出诸如DuplicateUserIDExceptoion这样的扩展了Exception的业务检查异常),那么该如何处理?未经检查的异常?

底线-我阅读了许多文章,指出Java不需要检查异常,因此,希望这种情况能帮助我更好地理解它。 请不要指向我读过很多很多的文章,我真的很困惑。 您能为我提供帮助的最佳方法是为上述情况提供答案。

注意:我确实知道任何可恢复的异常情况都必须由检查异常处理(我已经在我的项目中实现了),但是,我确实对未检查异常的拥护感到困惑。 您如何处理上述情况?

提前致谢。

可以完全像检查异常一样捕获未检查的异常。 我将使用以下方法来处理这种情况:

  1. 检查用户标识是否已经存在。 如果是这样,则抛出一个选中的DuplicateUserIdException。 我认为在这里,检查异常更有意义。 但是您也可以将异常作为运行时异常,并像捕获已检查的异常一样在表示层中捕获它
  2. 插入用户。 如果发生SQLException,要确保正是由于已经存在的用户ID根本不容易。 另外,如果延迟,可以在提交时检查约束。 仅在两个线程之间发生竞争的情况下才会发生此异常,因此该异常很少出现。 因此,我将其视为技术运行时异常,并显示一般错误消息。

如何开始事务,查询数据库以检查ID是否存在,如果不存在,请执行插入操作,然后提交事务? 如果确实存在,请告诉用户该ID已经存在。 更好的是,您可以对表单中的用户名字段进行模糊检查,作为ajax请求,并向他们指示已被使用。 为什么要依靠数据库异常来确定ID是否存在?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM