在数据库的“用户”表中,总会有一条记录,其中包含用户名和密码,以便能够首次登录。
我必须知道输入的用户名和密码是否与存储在我的数据库中的相同。另外,我希望得到配置文件类型字符串的名称,而不是获取 profile_id 类型 INT。
我要求的所有数据,我将在标签文本中显示它们,仅用于可视化目的。显示:已连接用户:姓名、用户、通行证等。
我不太了解 SQL 语句,这是我第二次使用它们,我需要帮助知道它是否正确。
代码:
public boolean login(String usuario, String contrasena) {
Dato_login d_lgn = new Dato_login();
boolean resultado = false;
sSQL = "SELECT u.nombre, u.apellido, u.usuario, u.contrasena, u.id_perfil FROM usuario U INNER JOIN perfil P ON p.id_perfil=u.id_perfil WHERE u.usuario='"
+ usuario + "' AND u.contrasena='" + contrasena + "'";
// Java 7 try-with-resources
try (Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sSQL)) {
while (rs.next()) {
if (d_lgn.getContrasena().equals(contrasena)) {
resultado = true;
} else {
resultado = false;
}
d_lgn.setPerfil(rs.getString("id_perfil"));
d_lgn.setUsuario(rs.getString("usuario"));
d_lgn.setNombre(rs.getString("nombre"));
d_lgn.setApellido(rs.getString("apellido"));
d_lgn.setContrasena(rs.getString("contrasena"));
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "SQLException:\n" + e, "Error: Logica_usuario.tableRegistros(String buscar)", JOptionPane.ERROR_MESSAGE);
}
return resultado;
}
注意:“Data_login d_lgn”是为了能够访问包含getter和setter的那个类,以便将信息保存在本地并更快地显示出来。
我的 SQL 语句是否正确?我是否要求提供配置文件名称而不是 id_profile?我是否正确比较了用户名和密码?
请帮助,将不胜感激。
你的问题是要避免我猜的 sql 注入。好吧,你只需要比较从数据库获得的用户名和密码和你从视图中带来的内容。
所以你用数据库的值来检查视图的值。小心,检查用户名和密码,你可以得到注射。
比较简单,不用JOIN,只检查有没有符合WHERE的记录或者没有那个WHERE的记录。