我对以下用于用户注册的代码有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();
}
}
答案 0 :(得分:0)
1)
if(userID.trim().isEmpty())//trim removes whitespaces
{
throw new SomeKindOfException();
//or just ...
return;
}
请参阅this question。
2)只需删除dispose
和new 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。