使用java检查数据库中重复值的最佳实践 6 月,4 周 Questions & Answers 1705 我使用@Column(unique=true)设置用户名的唯一约束 在将数据插入数据库之前检查重复值的最佳做法是什么 通过捕获当您尝试插入具有相同用户名的数据时程序将引发的异常李> 在尝试插入之前,请检查数据库中提供的用户名是否已存在李>
# 1 楼答案 这取决于你的设计。如果所讨论的检查在性能上不是关键的,或者成本不高,那么它实际上并不重要。从DB抽象层抛出的异常可以减少代码中的噪音,而有时需要在我们知道操作可以完成之前进行大量检查(取决于手头的问题)(通常需要进行错误处理) 还有另一个方面:独特真的是你想要的吗? 如果您使用的是MS SQL server,它不支持ANSI null,即定义为唯一的列可能只包含一个null值。我怀疑用户名从来都不是空的,但在其他一些唯一列上可能不是这种情况——在MS SQL Server上,您需要应用唯一筛选的索引(或类似索引),或者在应用程序中提前进行检查 我投票支持抛出一个异常+@eis建议的内容:检查UI中的用户名可用性
# 3 楼答案 在UI中输入此类用户名数据时,如果存在此类UI,请立即检查用户名的重复项。例如,使用javascript/XHR 提交后重新检查,因为javascript验证可以跳过,情况可能已经改变 如果在所有这些之后仍然存在一个重复的用户名(由于检查失败或有人同时插入),对我来说这听起来像是一个例外情况,所以捕捉一个例外 简而言之,两个选项,第二个检查两次
# 1 楼答案
这取决于你的设计。如果所讨论的检查在性能上不是关键的,或者成本不高,那么它实际上并不重要。从DB抽象层抛出的异常可以减少代码中的噪音,而有时需要在我们知道操作可以完成之前进行大量检查(取决于手头的问题)(通常需要进行错误处理)
还有另一个方面:独特真的是你想要的吗? 如果您使用的是MS SQL server,它不支持ANSI null,即定义为唯一的列可能只包含一个null值。我怀疑用户名从来都不是空的,但在其他一些唯一列上可能不是这种情况——在MS SQL Server上,您需要应用唯一筛选的索引(或类似索引),或者在应用程序中提前进行检查
我投票支持抛出一个异常+@eis建议的内容:检查UI中的用户名可用性
# 2 楼答案
我认为解决方案1(试捕)是好的。对于解决方案2,您仍然需要异常处理,以防数据库中存在并发性
# 3 楼答案
在UI中输入此类用户名数据时,如果存在此类UI,请立即检查用户名的重复项。例如,使用javascript/XHR
提交后重新检查,因为javascript验证可以跳过,情况可能已经改变
如果在所有这些之后仍然存在一个重复的用户名(由于检查失败或有人同时插入),对我来说这听起来像是一个例外情况,所以捕捉一个例外
简而言之,两个选项,第二个检查两次