使用java检查数据库中重复值的最佳实践

时间:2013-04-30 10:16:43

标签: java database unique

我使用@Column(unique=true)为用户名设置了唯一约束 在将数据插入数据库之前检查重复值的最佳做法是什么?

  1. 通过捕获当您尝试插入具有相同用户名的数据时程序将抛出的异常。
  2. 在尝试插入之前检查数据库是否已存在提供的用户名。

3 个答案:

答案 0 :(得分:5)

我认为解决方案1(try-catch)很好。对于解决方案2,如果数据库中存在并发性,则仍需要异常处理。

答案 1 :(得分:2)

这取决于您的设计。如果检查中的检查对性能不重要或成本不高,则无关紧要。与我们知道可以完成操作之前需要完成的大量检查(取决于手头的问题)相比,从DB抽象层抛出的异常可以减少代码中的噪声(并且通常需要进行错误处理)

还有另一个方面:你真正想要的是什么(阅读)? 如果您使用的是MS SQL服务器,则它不支持ANSI-null,即定义为unique的列可能只包含一个空值。我怀疑用户名永远不会为空,但在某些其他唯一列上可能不是这种情况 - 在MS SQL Server上,您需要应用唯一过滤的索引(或类似)或事先在应用程序中进行检查。

我投票支持抛出异常+ @eis建议:在UI中检查用户名可用性。

答案 2 :(得分:0)

如果在UI中输入此类用户名数据,请立即检查用户名是否重复,假设存在此类用户界面。例如,使用javascript / XHR。

在提交后重新检查,因为可以跳过javascript验证并且情况可能已经改变。

如果在所有这些之后仍然存在重复的用户名(由于检查失败或有人同时插入它),这对我来说听起来像是一个例外情况,所以赶上例外。

简而言之,两个选项,第二次检查两次。