当前位置: 首页 > 知识库问答 >
问题:

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

凤伟泽
2023-03-14

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

  1. 通过捕获当您尝试插入具有相同用户名的数据时程序将引发的异常

共有3个答案

芮化
2023-03-14

在UI中输入此类用户名数据时,立即检查用户名的重复项(假设存在此类UI)。例如,使用javascript/XHR。

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

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

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

堵彬彬
2023-03-14

这取决于你的设计。如果有问题的检查在性能上不是关键的,或者它不是昂贵的,那么它实际上并不重要。从DB抽象层引发的异常可以减少代码中的噪音,与有时需要在我们知道操作可以完成之前进行的大量检查(取决于手头的问题)相比(通常无论如何都需要错误处理)。

还有另一个方面:独特真的是你想要的吗?如果您使用的是MS SQL server,它不支持ANSI null,即定义为唯一的列可能只包含一个null值。我怀疑用户名永远不会为null,但在其他一些唯一列上可能不是这种情况-在MS SQL Server上,您需要应用唯一筛选的索引(或类似索引),或者在应用程序中预先进行检查。

我投票赞成抛出@eis建议的异常:检查UI中的用户名可用性。

虞博涛
2023-03-14

我认为解决方案1(尝试-捕捉)很好。对于解决方案2,您仍然需要异常处理,以防数据库中存在并发。

 类似资料:
  • 最近我考虑了在MySQL数据库中存储历史数据的最佳实践。目前,每个可版本表都有两列-和,都是类型。具有当前数据的记录的填充了其创建日期。当我更新此行时,我将填充更新日期,并使用添加新记录,与前一行中的相同-简单的操作。但是我知道这个表会非常大,非常快,所以获取数据会非常慢。 我想知道您是否有存储历史数据的实践?

  • 问题内容: 在调用对象的函数之前,我需要检查对象是否为null,以避免引发。 最好的方法是什么?我考虑过这些方法。 哪一种是Java最佳编程实践? 问题答案: 方法4是最好的。 将使用短路评估,这意味着如果a的第一个条件为假,则评估结束。

  • 我开始创建一个系统,我(作为目前唯一的用户)将加载一个动态创建的PHP页面,该页面具有

  • 我有以下代码: 我要做的是检查文件是否在当前目录中。如果找不到,则创建该文件。 如果找到该文件,则在中下载spy ticker数据,并将该数据附加到中,并将其保存在csv文件中。 问题 我如何摆脱列,为什么会出现该列?

  • 问题内容: 我出于好奇而问这个问题。基本上,我的问题是,当您拥有一个需要行条目才能具有像标志作用的事物的数据库时,最佳实践是什么?一个很好的例子就是堆栈溢出的标志,或者是bugzilla中的操作系统字段。可以为给定条目设置标志的任何子集。 通常,我会进行c和c ++的工作,因此我的直觉反应是将无符号整数字段用作一组可以翻转的位…但是我知道,由于多种原因,这不是一个好的解决方案。其中最明显的是可伸缩

  • 使用Spring Data nad Querydsl,我们可以只声明存储库接口并跳过实现类。一些具有特定名称或使用@Query注释的方法,仅此而已。 但是有时我想使用JPAQuery并自己定义方法的主体,比方说 null