Java 一个sql查询,用于检查唯一的
我有一个SpringMVC应用程序,在注册表中我有一个区域,用于存放电子邮件和姓名 在注册之前,我用服务层中的以下代码检查数据库中的所有字段是否唯一(我使用的是Java 一个sql查询,用于检查唯一的,java,sql,postgresql,spring-mvc,Java,Sql,Postgresql,Spring Mvc,我有一个SpringMVC应用程序,在注册表中我有一个区域,用于存放电子邮件和姓名 在注册之前,我用服务层中的以下代码检查数据库中的所有字段是否唯一(我使用的是spring data) 但我如何知道哪个参数不是唯一的名称或电子邮件 提前感谢 顺便说一句,我用以下代码解决了这个问题 @Override public Optional<String> isUnuque(final Users user) { final Users dbUser = this.re
spring data
)
但我如何知道哪个参数不是唯一的名称或电子邮件
提前感谢
顺便说一句,我用以下代码解决了这个问题
@Override
public Optional<String> isUnuque(final Users user) {
final Users dbUser = this.repository.findByEmailOrName(user.getEmail(), user.getName());
if (dbUser != null) {
if (user.getEmail().equals(dbUser.getEmail())) {
return Optional.of("Not unique email");
} else {
return Optional.of("Not unique name");
}
}
return Optional.empty();
}
@覆盖
公共可选isUnuque(最终用户){
最终用户dbUser=this.repository.findByEmailOrName(user.getEmail(),user.getName());
if(dbUser!=null){
if(user.getEmail().equals(dbUser.getEmail())){
返回可选的.of(“非唯一电子邮件”);
}否则{
返回可选的.of(“非唯一名称”);
}
}
返回可选的.empty();
}
但是,如果有任何sql查询不需要在服务层中进行双重检查就可以准确地执行我想要的操作,请将其写在下面
select 'name' from users where name = 'dd'
union all
select 'email' from users where name = 'ddd'@mail.ru
我不是java专家,但作为一名数据库人员,我想说一个更好的方法是对表中的
name
和email
强制执行UNIQUE
约束,并处理异常,无论应用程序如何,它都能保持数据的完整性
另一个选项是获取带有给定参数的电子邮件和姓名的计数
SELECT count(CASE
WHEN name = :p_name
THEN 1
END) AS name_count
,count(CASE
WHEN email = :p_email
THEN 1
END) AS email_count
FROM users;
COUNT
函数不计算空值,因此当CASE
中的条件为false(默认情况下NULL
)时,它会将0添加到计数中。因此,根据现有的值,查询会将name\u count
和email\u count
返回为0或1,您应该能够在代码中使用这些值
select 'name' from users where name = 'dd'
union all
select 'email' from users where name = 'ddd'@mail.ru
SELECT count(CASE
WHEN name = :p_name
THEN 1
END) AS name_count
,count(CASE
WHEN email = :p_email
THEN 1
END) AS email_count
FROM users;