Java JDBC - 用户注册&登录

时间:2017-12-07 20:33:24

标签: java user-interface

我对以下用于用户注册的代码有3个问题。

1)如何阻止用户注册自己在用户名和密码区域中提供空值?

2)我想知道处理和处理它是否是一个好习惯。如果用户凭据已存在于数据库中,则再次运行该表单。还有其他方法可以回到主屏幕吗?

3)我的程序运行正常,但在&#34行中有一条警告消息;不推荐使用JPasswordField类型的方法getText()"。这究竟意味着什么?

代码:

public void actionPerformed(ActionEvent arg0) {


            try
                    {
              String userID = userIDinput.getText();
              String pass = passwordField.getText();
              String myDriver = "com.mysql.jdbc.Driver"; //jdbc driver loaded
              String myUrl = "jdbc:mysql://localhost:3306/masterdata_db?autoReconnect=true&useSSL=false";
              Class.forName(myDriver);
              Connection conn = DriverManager.getConnection(myUrl, "root", "");

              Statement st = conn.createStatement();
              ResultSet resultSet;

              String check = "SELECT Username FROM userregistration WHERE Username = '"+userID+"' ";      
              resultSet = st.executeQuery(check);


              if(!resultSet.next()){

                  String sql = "INSERT INTO userregistration"
                            + "(Username, Password) VALUES"
                            + "(?,?)";
                  PreparedStatement pSt=conn.prepareStatement(sql);
                  pSt.setString(1, userID);
                  pSt.setString(2, pass);     
                  pSt.executeUpdate();   
                  conn.close();

              }

              else {

                  JOptionPane.showMessageDialog(frame, "USER ALREADY EXISTS. TRY ANOTHER ONE!", "Inane error",JOptionPane.ERROR_MESSAGE);
                  dispose();
                  new Login().setVisible(true);
              }


              }
            catch (Exception e)
                {

                  e.printStackTrace();
                }

            }

1 个答案:

答案 0 :(得分:0)

1)

if(userID.trim().isEmpty())//trim removes whitespaces 
{
    throw new SomeKindOfException();
    //or just ...
    return; 
}

请参阅this question

2)只需删除disposenew Login()即可。 JOptionPane会自动“返回主屏幕”。

3)你应该使用这样的密码字段:

JPasswordField passwordField = new JPasswordField();
char[] chars = passwordField.getPassword();
String pwd = new String(chars);
for (int i=0; i<chars.length; i++) chars[i] = ’x’; //overwrite password when done for more security

有关详细信息,请参阅How to Use Password Fields

JPasswordField使用char[]而不是String,因为String是不可变的。 有关详细信息,请参阅this question

相关问题