gpt4 book ai didi

Java JDBC swing登录表单错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:04 25 4
gpt4 key购买 nike

我目前正在做一个简单的 JDBC 项目,但我卡在了登录表单上

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/company","root","redhat");
stmt=con.createStatement();
String nm=jTextField1.getText();
char[] pass=jPasswordField1.getPassword();
String pw=Arrays.toString(pass);
String sql="select * from login where uname='"+nm+"' and pass='"+pw+"'";
rs=stmt.executeQuery(sql);
if(rs.next())
{
new MainPage().setVisible(true);
this.setVisible(false);
}
else
{
JOptionPane.showMessageDialog(this, "Wrong User name or password");
jTextField1.setText("");
jPasswordField1.setText("");

}
}
catch(Exception e)
{
System.out.println(e);
}
} `

单击此按钮时,将显示我创建的新页面,但它会显示“错误的用户名或密码”消息对话框。我的错误是什么?我的数据库在 mysql 中。

最佳答案

错误 1: Arrays.toString(char[])将返回一个数组表示,例如如果jPasswordField1中的密码是password,结果就是这个字符串:[p, a, s, s, w, o, r, d]

修复 1: 使用 new String(char[])相反。


错误 2: 使用字符串连接构建 SQL 语句。这将使您的代码容易受到 SQL Injection 的影响。攻击,黑客可以在其中窃取您的数据并删除您的表格

修复 2:使用 PreparedStatement .


错误 3: 未释放资源。这将导致内存泄漏。

修复 3: 使用 try-with-resources .


结果:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
try {
boolean loginOk;
Class.forName("com.mysql.jdbc.Driver");
try (Connection con = DriverManager.getConnection("jdbc:mysql://localhost/company","root","redhat")) {
String sql = "select * from login where uname=? and pass=?";
try (PreparedStatement stmt = con.prepareStatement(sql)) {
stmt.setString(1, jTextField1.getText());
stmt.setString(2, new String(jPasswordField1.getPassword()));
try (ResultSet rs = stmt.executeQuery(sql)) {
loginOk = rs.next();
}
}
}
if (loginOk) {
new MainPage().setVisible(true);
this.setVisible(false);
} else {
JOptionPane.showMessageDialog(this, "Wrong User name or password");
jTextField1.setText("");
jPasswordField1.setText("");
}
} catch(Exception e) {
System.out.println(e);
}
}

关于Java JDBC swing登录表单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41097170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com