[英]To calculate age from DOB and inner join of two tables and then draw Graph
[英]SQL query to do INNER JOIN from two tables of a data base
我有兩個表:
我在使用Java和MySQL的程序上進行了登錄,我想知道用戶輸入的用戶名和密碼是否正確,才能將其發送到另一個Jframe。
我對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, p.nombre AS perfil_nombre FROM "
+ "usuario U INNER JOIN perfil P u.id_perfil = p.id "
+ "WHERE u.usuario='" + usuario + "' AND u.contrasena='" + contrasena + "'";
// Java 7 try-with-resources
try (PreparedStatement pstm = con.prepareStatement(sSQL);
ResultSet rs = pstm.executeQuery(sSQL)) {
while (rs.next()) {
if (d_lgn.getContrasena().equals(contrasena)) {
resultado = true;
} else {
resultado = false;
}
d_lgn.setPerfil(rs.getString("perfil_nombre"));
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: login(String usuario, String contrasena)", JOptionPane.ERROR_MESSAGE);
}
return resultado;
}
無法正常工作,它一直告訴我沒有任何用戶可以登錄。我需要更改什么?
我也想接收配置文件的名稱,而不是用戶的ID,我嘗試了INNER JOIN,但是我還不知道它如何正常工作。
表:
收到錯誤:
SQL語法錯誤
在這一部分:
sSQL = "SELECT u.nombre, u.apellido, u.usuario, u.contrasena, u.id_perfil FROM usuario U INNER JOIN perfil P ON p.nombre=u.nombre WHERE u.usuario='"
+ usuario + "' AND u.contrasena='" + contrasena + "'";
我看不到在哪里定義變量contrasena
或usario
。 應該是...AND u.usario='" + username + "' AND u.contrasena='" + password + "'";
代替嗎(暫且暴露了SQL注入漏洞)。似乎懷疑您正在nombre
上連接usario
和perfil
表。是不是用戶名與個人資料名相同?如果不更好地了解您的域和數據模型,我不能說真的。
如果您還想檢索配置文件名稱,則查詢可能是這樣的:
SELECT u.nombre, u.apellido, u.usuario, u.contrasena, p.nombre as perfil_nombre
FROM usario u
JOIN perfil p ON u.id_perfil = p.id_perfil
WHERE u.usuario = ? and u.contrasena = ?
注意,我將在id列而不是nombre
上加入usario
和perfil
。 我認為您希望usario.perfil_id
與perfil.id_perfil
列匹配。
代替con.createStatement()
使用con.createPreparedStatement()
。 有關更多信息,請參見使用預准備語句 。
最后,要從ResultSet
訪問perfil.nombre
,請執行以下操作: rs.getString("perfil_nombre");
另外,我返回的是perfil.nombre
而不是usario.nombre
因為您提到想要配置文件名稱而不是用戶名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.