java - 添加一种防止方法,用户无法使用名称和电子邮件创建现有帐户

标签 java mysql user-interface

我想实现一种方法来阻止用户创建一个现有帐户,其中的名称和电子邮件已被使用

 try{
        String query="Insert into users(name,email,password)values(?,?,?)";
       pst=conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
        pst.setString(1,nam.getText());
        pst.setString(2,emal.getText());
        pst.setString(3,pass.getText());
        int affectedrows=pst.executeUpdate();
        rs=pst.getGeneratedKeys();
        if(rs.next()){
            int id = rs.getInt(1);
             JOptionPane.showMessageDialog(null, "Your account has been registerd");
            dispose();
            new Landing_Page(id);
        }
        else{
            JOptionPane.showMessageDialog(null,"Account already exists");
        }
    }
    catch(Exception e ){
       JOptionPane.showMessageDialog(null, e.getMessage());    
    }
}               

最佳答案

最好的方法是从数据库中选择查询电子邮件和姓名,如果查询的结果集为空,则插入到表中。

假设您的数据库中有一个表,如下所示:

CREATE TABLE `stackoverflow`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));

现在下面的代码首先从数据库中选择在此方法中设置为参数的名称和电子邮件,然后如果值为空(使用 resultSet 方法 next() 检查它)开始插入到表中:

 public static void insertUser(String name,String email,String pass)
{
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    String queryName = "select * from users where name = ?";
    String queryEmail = "select * from users where email = ?";
    boolean nameExists = false; 
    boolean emailExists = false;
    try
    {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stackoverflow", "root", "red devils11");
        ps = conn.prepareStatement(queryName);
        ps.setString(1, name);
        rs = ps.executeQuery();
        nameExists =  rs.next();

        ps = conn.prepareStatement(queryEmail);
        ps.setString(1, email);
        rs.close();
        rs = ps.executeQuery();
        emailExists = rs.next();
        if(!nameExists && !emailExists)
        {
            String insertUser = "insert into users(name,email,password) values(?,?,?)";
            ps = conn.prepareStatement(insertUser);
            ps.setString(1, name);
            ps.setString(2, email);
            ps.setString(3, pass);
            ps.execute();
        }
        else
        {
            System.out.println("user or email is already in the database");
        }


    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            rs.close();
            ps.cancel();
            conn.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}//insertUser

remember to add jconnector for mysql to the jre library of your project or you won't even get connected https://dev.mysql.com/downloads/connector/j/

关于java - 添加一种防止方法,用户无法使用名称和电子邮件创建现有帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893233/

相关文章:

java - 连接 ArrayList 中的字符串和 double

php - 显示整个数据库的多字段搜索表单

php - 检查是否不存在并使用 PHP 插入到一个查询中

java - makeText 方法,何时使用此方法以及何时使用 getBaseContext()

java - 如何创建 "Open"和 "Closed"指标?

Java:使用 currentTimeMillis() 获取时间很长,如何以 X 小数位精度输出它?

php - 声明变量 MySQL

java - 简单的 Java/Swing GUI 游戏

java - 以编程方式编写 gui,还是使用高级 gui 编辑器 (Java Swing)?

java - 如何从 intellij 项目 View 中隐藏不必要的文件?