0

设想:

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

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

底线 - 我读了很多文章说 Java 不需要检查异常,所以我希望这个场景能帮助我更好地理解它。请不要指向文章,因为我已经阅读了很多很多,我真的很困惑。您可以帮助我的最好方法是为上述情况提供答案。

注意:我确实理解任何可恢复的异常情况都必须由已检查的异常(我一直在我的项目中实现)处理,但是,我真的对仅支持未检查异常的人感到困惑。你们如何处理上述情况?

提前致谢。

4

2 回答 2

4

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

  1. 检查用户 ID 是否已经存在。如果是这样,抛出一个检查过的 DuplicateUserIdException。我认为检查异常在这里更有意义。但是您也可以将异常设置为运行时异常,并在表示层中捕获它,就像捕获已检查的异常一样
  2. 插入用户。如果发生 SQLException,则根本不容易确定它是否正是由于已经存在的用户 ID。另外,如果延迟,可以在提交时检查约束。这种异常只会在两个线程之间出现竞争条件的情况下发生,因此应该很少见。因此,我会将其视为技术运行时异常并显示一般错误消息。
于 2012-05-30T17:10:36.080 回答
0

如何启动事务,查询数据库以检查 id 是否存在,如果不存在,执行插入,然后提交事务?如果确实存在,则告诉用户该 id 已经存在。更好的是,您可以将表单中用户名字段的模糊检查作为 ajax 请求,并向他们表明它已经被占用。为什么要依赖数据库异常来判断id是否存在?

于 2012-05-30T17:07:43.430 回答