这是我在mysqldb中使用innetbeans的代码。
表单正在接受用户输入(名称和密码(,并成功地将其插入数据库表。
但是,当我试图使用名称和密码登录表单时,在保持名称固定的情况下,我想比较密码,如果密码字段与特定名称匹配,则只登录。
显示异常:
异常:"字段列表"中的未知列"密码">
我将密码保存为数据库表中的字符串,但在接受用户输入时使用JPasswordField。
public class Trying extends JFrame{
Trying(){
//declaration of fields and buttons
// adding name and password in mysql table
jb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "");
String query="INSERT INTO tryingtable (name,password) VALUES (?,?)";
PreparedStatement prepstmt=conn.prepareStatement(query);
prepstmt.setString(1, jtf.getText());
char[] password = jpf.getPassword();
String pass = new String(password);
prepstmt.setString(2,pass);
prepstmt.execute();
JOptionPane.showMessageDialog(null, "Done");
prepstmt.close();
}
catch(Exception e){
System.out.println("Exception on submit:"+e.getMessage());
}
}
});
// user will enter passsword and name and we will check in mysql table if the password in correct for the particular name in mysql table
jb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","");
String query="SELECT password FROM tryingtable WHERE name=?;";
PreparedStatement prepstmt=conn.prepareStatement(query);
prepstmt.setString(1,jtf.getText());
ResultSet rs=prepstmt.executeQuery();
if(rs.next()){
String result=rs.getString(query);
char[] pass = jpf.getPassword();
String password1= Arrays.toString(pass);
if(result.equals(password1)){JOptionPane.showMessageDialog(null, "logged in");}
else{JOptionPane.showMessageDialog(null, "Sorry");}
}
}
catch(Exception e){
System.out.println("Exception:"+e.getMessage());
e.getStackTrace();
}
}
});
}
public static void main(String[] args) {
new Trying();
}
}
请帮助在名称固定时成功比较密码字段。
String result=rs.getString(query);
不正确。您正在将整个查询传递给方法。
您应该传递要检索的列的列名或索引号:
String result = rs.getString("password");
或
String result = rs.getString(1);
@LorisSecuro是绝对正确的:https://stackoverflow.com/a/51609437/10123626除此之外,你需要在上面的代码中更改的是:
当您想比较密码字段和文本字段时,请使用
char[] pass_char = passwordField.getPassword();
String pass_string = new String(pass_char);
以上代码将以字符串形式为您提供密码字段值,然后
if(pass_string.equals(textfield))
JOptionPane.showMessageDialog("Password match");
else
JOptionPane.showMessageDialog("Password did not match");