我需要应用检查,以便用户无法使用数据库中已存在的电子邮件ID进行注册。如何检查数据库中的重复条目?
回答
大概是这样的DAO方法:
public boolean isDuplicateEntry(String email) {
Session session = getSession();
try {
User user = (User) session.get(User.class, email);
session.close();
return (null != user);
} catch (RuntimeException e) {
log.error("get failed", e);
session.close();
throw e;
}
}
我会建议把session.close()放在finally块中。这并不是一个巨大的交易,但这是一个经典的例子,你可能想在我看来使用finally块。 – 2010-06-23 13:14:37
我应该在哪里放这个代码? – 2010-06-23 13:18:52
@ tkeE2036你是对的,@bhavna raghuvanshi你应该把它放在您的DAO类 – ant 2010-06-23 13:40:09
在数据库表中的相关列上添加一个唯一约束。例如(MySQL的):
ALTER TABLE Users ADD UNIQUE (Email)
编辑 - 如果你在上面评论写电子邮件领域已经是一个主键,那么你不需要这个,因为主键被定义独特。然后在Java中,您可以捕获您获得的SQLException
,如果您要插入带有已存在主键的记录,或者您可以在尝试插入之前执行SELECT ... WHERE Email=?
以查看是否已有包含该电子邮件的记录地址。
在电子邮件列上添加约束,或在插入前选择。
+1 - *“或插入前选择” * ...在同一个事务! – 2010-06-23 13:11:40
+1 - 尽可能(或实际)在数据库级别实施数据约束。 – 2010-06-23 13:57:29
您可以:
- 使电子邮件领域独树一帜,尝试插入和捕获异常
或
- ma科每前选择插入
确实有基本上有两种方式来实现这一目标:
测试是否记录插入,同一事务内部存在之前。
SELECT
的ResultSet#next()
应返回false
。然后做INSERT
。只是做
INSERT
反正确定的任何SQLException#getSQLState()
逮住SQLException
开始与23
这是一个约束违规按该SQL specification。它可能是由多种因素造成的,而不仅仅是违反约束条件。你应该不处理每个SQLException
作为违反约束。public static boolean isConstraintViolation(SQLException e) { return e.getSQLState().startsWith("23"); }
我会选择第一种方式,因为它在语义上更正确。这实际上并不是一个特殊的情况。你即知道它可能会发生。但它可能潜在地失败,在交易不是同步(无意识地或优化性能)的交易量很大的并发环境中。您可能想要确定异常。
这就是说,你通常不希望把一个PK放在电子邮件字段中。他们即将发生变化。而是使用数据库管理的自动生成的PK(MySQL:BIGINT UNSIGNED AUTO_INCREMENT
,Oracle/PostgreSQL:SERIAL
,SQLServer:IDENTITY
)并给电子邮件字段键入UNIQUE
。
- 1. 如何检查数据库中的重复条目?
- 2. Web窗体:检查重复的数据库条目
- 3. 如何在数据库表中查找重复条目?
- 4. 如何修复数据库中的重复条目?
- 5. 如何从ID为mysql数据库重复条目重复
- 6. SQL:在库数据库中查找重复条目
- 7. 数据库错误:重复的条目
- 8. 如何从数据库中删除重复的条目?
- 9. 如何防止数据库中的重复条目
- 10. 如何控制postgres数据库表中的重复条目
- 11. 如何处理单个列数据库中的重复条目?
- 12. 如何防止我Access数据库中的重复条目?
- 13. 如何列出数据库中的重复条目
- 14. 如何防止SQL数据库中的类似(重复)条目?
- 15. 防止重复条目数据库
- 16. 如何检查Android数据库中的重复名称?
- 17. 如何通过listbox检查listview中的重复条目?
- 18. 查找数组中的重复条目
- 19. ng -repeat重复数据重复条目
- 20. 验证检查数据库中的重复数据
- 21. 在输入数据之前检查数据库中的重复
- 22. PHP MySQL检查重复条目?
- 23. PHP重复名称检查条目
- 24. 计数数据库中的重复条目
- 25. PHP检查重复数组中的条目
- 26. 删除重复的条目从条件的数据库
- 27. PHP - 如何检查变量是否匹配数据库条目?
- 28. 如何使用java检查重复条目的XML文件?
- 29. 如何检查在PHP中的数据库中的条目删除?
- 30. 从MySQL数据库中删除重复的条目
目前还不清楚:你的接口在Java中的MySQL? – Jack 2010-06-23 13:06:16
只需在数据库中选择该电子邮件并查看它是否在英寸。您可能想知道您使用的数据库等等。 – hamax 2010-06-23 13:06:55
是的,我正在使用我的sql数据库。 我也在田间EMAILID作为主键 – 2010-06-23 13:09:51