如何验证来自MySQL数据库的用户电子邮件?

我的网络应用程序上有一个注册表。我想要的是,当用户提交表单时,应该进行验证以检查用户输入的电子邮件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());

        }


      }

注意:- 我主要关心的是电子邮件验证。


慕田峪9158850
浏览 149回答 3
3回答

UYOU

方法1:最简单的方法是在列电子邮件上使用唯一索引。您不能使用首先查找电子邮件并插入电子邮件的解决方案。假设有两个用户 some@email.com 提交电子邮件。而且您的数据库中没有电子邮件。两个用户都将得到 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";}

繁花如伊

对于电子邮件验证您必须将电子邮件列设置为表中的唯一列。当您尝试插入新用户时,如果电子邮件已存在,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}

皈依舞

对于唯一电子邮件验证,有两种方法:方法 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 负责检查唯一的电子邮件地址并引发错误。使用错误将其显示在前端。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java