情景:
对于需要根据用户ID进行注册的网站,用户ID必须是唯一的。假设用户已尝试使用已存在的“foo”用户ID进行注册(包含其他必填字段)。现在,不使用已检查的异常(数据库API将抛出SQLException
用于重复插入),我想知道未经检查的异常的拥护者如何处理这种情况并且对用户已经选择了id已经被选中了?
让我们说这个网站是关于Struts的(不,不,我不是在做一个项目,只是我更了解它)。用户向Struts Action提交填充信息,Struts Action调用DAO以插入新记录。因此,最终,DAO将发出INSERT语句,该语句将失败。因此,如果Action(调用DAO)没有显式处理这种情况(DAO方法可能只是声明它抛出SQLException
或者方法可能会捕获SQLException
并抛出像DuplicateUserIDExceptoion这样的业务检查异常,从而扩展了Exception ),如何处理未经检查的异常?
底线 - 我读过许多文章,声明Java不需要检查异常,所以,这个场景将帮助我更好地理解它,我希望如此。请不要指向文章,因为我读了很多很多,而且我真的很困惑。您可以帮助我的最好方法是回答上述情况。
注意:我确实理解任何可恢复的异常情况必须由一个已检查的异常处理(我已经在我的项目中实现)但是,我真的很困惑的是未经检查的异常ONLY倡导者。你们如何处理上述情况?
提前致谢。
答案 0 :(得分:4)
可以像检查的异常一样捕获未经检查的异常。我会使用以下内容来处理这种情况:
答案 1 :(得分:0)
如何启动事务,查询数据库以检查id是否存在,如果不存在,执行插入,然后提交事务?如果确实存在,请告诉用户该ID已存在。更好的是,您可以将表单中用户名字段的模糊检查作为ajax请求进行检查,并向他们表明已经采用了该模板。为什么要依赖数据库异常来确定id是否存在?