Java 逻辑异常与技术异常

Java 逻辑异常与技术异常,java,exception,Java,Exception,对于唯一字段-电子邮件,用户表中的数据库级别有限制。也就是说,如果我们尝试使用现有电子邮件地址保存用户,则会发生SQLServerException。在这种情况下,我们可以捕获这个技术异常,创建并抛出我们自己的技术异常 但是我们也可以向数据库发出请求,检查用户是否存在,然后抛出我们自己的逻辑异常 问题是哪个选项更可取?这取决于您的需求 在1选项的情况下,您需要对电子邮件字段进行约束。然后,在捕获异常时,您需要小心,这确实限制了对电子邮件字段的违反。我在这里看到的唯一优点是,您只需对db执行一次查

对于唯一字段-电子邮件,用户表中的数据库级别有限制。也就是说,如果我们尝试使用现有电子邮件地址保存用户,则会发生SQLServerException。在这种情况下,我们可以捕获这个技术异常,创建并抛出我们自己的技术异常

但是我们也可以向数据库发出请求,检查用户是否存在,然后抛出我们自己的逻辑异常


问题是哪个选项更可取?

这取决于您的需求

  • 在1选项的情况下,您需要对电子邮件字段进行约束。然后,在捕获异常时,您需要小心,这确实限制了对电子邮件字段的违反。我在这里看到的唯一优点是,您只需对db执行一次查询

  • 在第二种情况下,您拥有所有的控制权,您可以显式地检查电子邮件是否已经存在于单独的db查询中,如果没有抛出异常,则进行额外的查询以插入数据。 在这里,您必须拨打2分贝的电话,但您可以更好地控制行为


  • 最佳实践是检查数据库,而不是使用数据库的约束


    必须将数据库约束视为确保数据完整性的第二道屏障。但它不能驱动你的业务逻辑。只有您的软件驱动您的业务逻辑。

    技术和逻辑异常不是java类型,恐怕这个问题对我来说没有多大意义。但我想说,当你试图插入一封已经存在的电子邮件时,抛出异常是正常的。对于另一种情况(查询用户是否已经存在),我希望有一个返回布尔值而不是异常的方法。技术和逻辑异常是异常的另一种分类。什么是逻辑异常?-例如,用户输入了不正确的值,因此,我们得到了负平衡值。根据我们的逻辑,平衡不能是负的,那么我们应该向它抛出一个异常。@Bentaye逻辑异常也称为业务异常exceptions@Nico我很想知道你对这个案例的看法(检查是否有用户使用db query存在)这个异常是业务吗?@alexis_druzik是的,它是业务异常,您决定您的软件不允许用户注册两次。但是你可以选择允许一个用户注册几次(当然,对于一个用户来说,使用同一封电子邮件拥有多个帐户是没有意义的,而且出于其他原因也是没有意义的)。