我需要應用檢查,以便用戶無法使用數據庫中已存在的電子郵件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. 插入前檢查數據庫中的重複條目
- 3. 重複數據庫條目
- 4. Web窗體:檢查重複的數據庫條目
- 5. 如何在數據庫表中查找重複條目?
- 6. 如何修復數據庫中的重複條目?
- 7. 如何編寫檢查重複數據庫條目的if語句?
- 8. 如何檢查數據庫中的重複數據?
- 9. 重複條目檢查
- 10. 如何從ID爲mysql數據庫重複條目重複
- 11. SQL:在庫數據庫中查找重複條目
- 12. 數據庫錯誤:重複的條目
- 13. 處理重複的數據庫條目
- 14. 重複條目的數據庫錯誤
- 15. 來自數據庫的重複條目
- 16. 防止重複的數據庫條目
- 17. 如何刪除MySql數據庫表中的重複條目
- 18. 如何防止SQL數據庫中的類似(重複)條目?
- 19. 如何防止數據庫中的重複條目
- 20. 如何防止我Access數據庫中的重複條目?
- 21. 如何處理單個列數據庫中的重複條目?
- 22. 如何列出數據庫中的重複條目
- 23. 如何從數據庫中刪除重複的條目?
- 24. 如何控制postgres數據庫表中的重複條目
- 25. 如何檢查關係數據庫中的多個條目?
- 26. Android如何檢查我的sqlite數據庫中的重複項?
- 27. 防止重複條目數據庫
- 28. 重複條目到mysql數據庫
- 29. MySQL數據庫條目重複
- 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