亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何驗證來自MySQL數據庫的用戶電子郵件?

如何驗證來自MySQL數據庫的用戶電子郵件?

慕田峪9158850 2022-09-01 19:33:14
我的網絡應用程序上有一個注冊表。我想要的是,當用戶提交表單時,應該進行驗證以檢查用戶輸入的電子郵件ID是否已存在于數據庫中。因此,如果它存在,那么應該出現一條像小吃店一樣的消息,說,電子郵件ID已經存在。如果是新電子郵件,則它將重定向到成功頁面。以下是我的checkData方法,我只是檢查當我在表單上輸入電子郵件ID時,它是否存在,但輸出始終是“找不到值”。public void checkData() {      try {            Class.forName("com.mysql.cj.jdbc.Driver");          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname?autoReconnect=true&useSSL=FALSE", "root", "pwd");          st = con.createStatement();           String query1 = "select email from users where email='" +email99+ "'";          ResultSet rs = st.executeQuery(query1);          if(rs.next()) {              System.out.println("Success");          }          else {              System.out.println("Value not found");          }          rs.close();      } catch (Exception e) {            // TODO Auto-generated catch block            System.out.println(e.getMessage());        }      }注意:- 我主要關心的是電子郵件驗證。
查看完整描述

3 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

方法1:


最簡單的方法是在列電子郵件上使用唯一索引。


您不能使用首先查找電子郵件并插入電子郵件的解決方案。假設有兩個用戶 [email protected] 提交電子郵件。而且您的數據庫中沒有電子郵件。


兩個用戶都將得到 false,并且您將向 DB 插入兩行具有相同電子郵件的行。res.next()


如果使用唯一索引,則如果已有電子郵件,則會收到異常。您可以捕獲異常并返回“重復電子郵件”消息。請參閱問題捕獲重復異常


如果您使用Mysql,也許您可以使用ON DUPLICATE KEY。


方法2:有一個更復雜的解決方案。


如果不能使用唯一索引,那么可以考慮這一點。


您可以使用鎖定。如果在分布式系統上工作,則應使用分布式鎖。您應該鎖定電子郵件。如果線程獲得鎖定,您可以檢查是否有目標電子郵件,然后插入到數據庫中。


但是,如果您的系統只在一個JVM上運行,您可以嘗試:


syschronized(email.intern()) {

  // check the email whether exists

  // if not, insert it.

}

在這種情況下,您將遭受大型字符串池的影響,這將影響您的GC暫停并浪費內存。


實際上,您可以使用雙重檢查來優化性能。它看起來像


 emailInDB = fetchEmailFromDB(email);

 if (emailInDB == null) {

    lock(email);

    emailInDB = fetchEmailFromDB(email);

    if(emailInDB == null) {

       insertIntoDB(email)

   } else {

     return "the email already exists";

   }

 } else {

  return "the email already exists";

}


查看完整回答
反對 回復 2022-09-01
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

對于電子郵件驗證

  • 您必須將電子郵件列設置為表中的唯一列。

  • 當您嘗試插入新用戶時,如果電子郵件已存在,SQL 將引發約束沖突異常。您也可以使用該錯誤進行錯誤處理

一般來說,與獲得操作相比,更新將花費更多的時間,所以最好的方法是.首先,您必須檢查此電子郵件ID是否存在任何行

String sql = "select email from users where email= ? ";

PreparedStatement prepStmt = conn.prepareStatement(sql);

prepStmt.setString(1, "emailId");

ResultSet rs = prepStmt.executeQuery();


if (rs.next()) {

  System.out.println("Row with email found");

} else {

  // you can write update code here

}


查看完整回答
反對 回復 2022-09-01
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

對于唯一電子郵件驗證,有兩種方法:


方法 1:第一個是執行選擇查詢并檢查它,不建議將其作為解決方案。


PreparedStatement statement = connection.prepareStatement("select email from users where email= ?");

statement.setString(1, email99);    

ResultSet resultSet = statement.executeQuery();


if (resultSet.next()) {

  System.out.println("Row with email found");

} else {

  // you can write update code here

}

方法 2:在數據庫級別,使電子郵件列唯一。因此,每當插入新記錄時。DB 負責檢查唯一的電子郵件地址并引發錯誤。使用錯誤將其顯示在前端。


查看完整回答
反對 回復 2022-09-01
  • 3 回答
  • 0 關注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號