优化代码。 private void check(String name, String password) { boolean result = false; try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("数据库加载失败" + e); } try { String url = "jdbc:mysql://localhost:3306/student"; String user = "root", pwd = "271332"; Connection con; Statement sql; ResultSet rs; con = DriverManager.getConnection(url, user, pwd); sql = con.createStatement(); String mysql = "select*from users " + "where uname='" + name + "'and upwd='" + password + "'"; System.out.println(mysql); rs = sql.executeQuery(mysql); if (rs.next()) { JOptionPane.showMessageDialog(this, "欢迎" + name + "登陆!", "登陆成功", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, "用户名或密码输入错误,请重试!", "登陆失败", JOptionPane.ERROR_MESSAGE); System.out.println(rs.getString("uname").equals(name)); System.out.println(rs.getString("upwd").equals(password)); result = false; } } catch (SQLException ee) { JOptionPane.showMessageDialog(null, "数据读取失败" + ee, "失败", JOptionPane.ERROR_MESSAGE); } }
时间: 2024-02-23 09:01:13 浏览: 67
有几个方面可以优化这段代码:
1.防止 SQL 注入攻击
在这段代码中,SQL 查询语句是通过字符串拼接的方式生成的,这存在 SQL 注入攻击的风险。建议使用 PreparedStatement 来代替 Statement,这样可以使用参数化查询,防止 SQL 注入攻击。
2.使用 try-with-resources
在代码中打开了 Connection、Statement 和 ResultSet,需要手动关闭,这存在资源泄漏的风险。建议使用 try-with-resources,这样可以自动关闭资源。
3.将数据库连接信息配置在配置文件中
在代码中直接硬编码了数据库连接信息,这样不方便修改和维护。建议将数据库连接信息配置在配置文件中,这样可以方便修改和维护。
4.合理处理异常
在代码中,如果发生异常,只是简单地打印了错误信息,没有进行合理的处理。建议使用合适的方式来处理异常,比如抛出异常或者返回错误码。
优化后的代码如下所示:
```
private void check(String name, String password) {
boolean result = false;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/student";
String user = "root";
String pwd = "271332";
String sql = "select * from users where uname=? and upwd=?";
try (Connection con = DriverManager.getConnection(url, user, pwd);
PreparedStatement ps = con.prepareStatement(sql)) {
ps.setString(1, name);
ps.setString(2, password);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
JOptionPane.showMessageDialog(this, "欢迎" + name + "登陆!", "登陆成功", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "用户名或密码输入错误,请重试!", "登陆失败", JOptionPane.ERROR_MESSAGE);
result = false;
}
}
}
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, "数据库加载失败" + e, "失败", JOptionPane.ERROR_MESSAGE);
} catch (SQLException ee) {
JOptionPane.showMessageDialog(null, "数据读取失败" + ee, "失败", JOptionPane.ERROR_MESSAGE);
}
}
```
阅读全文