Java 在向用户报告之前检测SQLException原因的惯用方法

Java 在向用户报告之前检测SQLException原因的惯用方法,java,sql,database,jdbc,playframework,Java,Sql,Database,Jdbc,Playframework,我正在编写一个数据库支持的web服务器,我想知道实现以下功能的最佳实践/惯用方法: 因此,当用户创建帐户时,服务器需要确保用户名尚未被使用。数据库中的用户名字段定义为唯一键。因此,我希望能够利用DBMS,而不是先检查用户名是否存在然后再添加用户名的两步过程。我的意思是,只需添加记录并相信将抛出SQLException 我的问题是如何找到异常的原因。正如在中一样,我当然不能将exception.getMessage()返回给用户,但我需要一种方法来确定它是否是由于唯一键字段中的重复导致的错误(因此

我正在编写一个数据库支持的web服务器,我想知道实现以下功能的最佳实践/惯用方法:

因此,当用户创建帐户时,服务器需要确保用户名尚未被使用。数据库中的用户名字段定义为唯一键。因此,我希望能够利用DBMS,而不是先检查用户名是否存在然后再添加用户名的两步过程。我的意思是,只需添加记录并相信将抛出SQLException

我的问题是如何找到异常的原因。正如在中一样,我当然不能将exception.getMessage()返回给用户,但我需要一种方法来确定它是否是由于唯一键字段中的重复导致的错误(因此让用户知道),而不是JDBC可能引发的另一种类型的问题(应该记录其他问题)


我可以尝试解析e.getMessage(),但我希望有一种更全面的方法来做到这一点。

最佳做法是捕获sqlexception,处理它(取决于您的db提供程序异常代码),将其转换为新的异常,如UserAlreadyExistException,并将其扔到表示层。最后,在表示层捕获它并放置一条用户友好的消息。

常见的方法是在事务中执行两步流程。您的应用程序逻辑应该通知用户,而不是SQL错误。一般来说,我认为将异常用于非异常流控制是个坏主意(TM)。我希望在单击按钮之前看到用户的反馈,即用户名不可用,并对奇数竞争条件求助于异常处理。与其解析错误消息,不如检查SQL错误号