O JTable (que carregada os dados do BD) apresenta 3 colunas (id, login e senha).
Dados da coluna ‘senha’ não são mostradas.
Seleciono uma linha a ser alterada, clico em um JButton e abre-se um JDialog com os dados da linha selecionada, onde digita-se:
(JTextFields): login / senha atual / senha nova / confirmação de senha nova.
Ao clicar em JButtonSalvar, quero antes fazer a validação de login/senha (para garantir que aquele usuário poderá alterar apenas o seu próprio login/senha). E é isso que não estou conseguindo fazer funcionar.
Eis os trechos dos códigos pertinentes a questão:
[code]
private void btSalvarUserActionPerformed(java.awt.event.ActionEvent evt) {
// Quero comparar a senha correspondente ao do login que foi selecionado na JTable, mas a senha não aparece lá. Tenho que fazer uma consulta "interna" via DAO e retornar a senha daquele login e/ou id.
try {
// criei esses métodos getPassLogin(String) localizados no DAO, mas não funcionou:
if (!(txtPsw1.getText().equals((usrDAO.getPassLogin(x)).toString()))) // verifica se o usuário digitou a senha do login selecionado
{
JOptionPane.showMessageDialog(this, “A senha atual não confere.”, “Validação”, JOptionPane.WARNING_MESSAGE);
return;
}
} catch (SQLException ex) {
Logger.getLogger(alterUserDialog.class.getName()).log(Level.SEVERE, null, ex);
}
int result = JOptionPane.showConfirmDialog(this, "Confirma os dados ?");
if (result != 0) {
return;
}
try { // este trecho não é executado
usrInEdit.setLogin(txtUser.getText()); // captura o login validado
usrInEdit.setPsw(txtPsw3.getText()); // captura a senha validada
usrDAO.updateUser(usrInEdit); // atualiza o BD via DAO
JOptionPane.showMessageDialog(this, "Dados alterados com sucesso.");
} catch (Exception ex) {
ex.printStackTrace();
}
ou mesmo um breakpoint para saber se o valor das variáveis está sendo capturado, e se realmente elas são as mesmas?
Talvez seja problema no seu SELECT, tem como postar o código do usrDao.getPassLogin()?
Pode também fazer normalmente esta comparação através de um ResultSet, comparando o resultado dele com o digitado pelo usuário. Ex:
PreparedStatement ps = con.prepareStatement("Select * from Usuarios where Senha='"txtPsw1.getText()'");
ResultSet rs = ps.executeQuery();
if (rs.first())
{
//Se retornar algum registro, é pq existe esta senha no banco! Pode colocar código aqui. Seria mais seguro comparar usuario + senha, pois pode existir senha repetida.
}
Meu projeto é assim: na tela inicial é possível qualquer usuário apenas consultar os dados. Para acessar o ‘modo Gerenciamento do BD’, eu já havia criado o método abaixo:
public boolean isValidUserAndPassword(String login, String password) throws SQLException {
boolean toReturn = false;
ResultSet rs = executeQuery("SELECT * FROM ADMIN.USERS WHERE LOGIN = ? AND PSW = ?", login, password);
if (rs.next()) {
toReturn = true;
}
rs.close();
return toReturn;
}
Então, com a dica que o vinnysoft me deu, só precisei implementar no ‘ButtonActionPerformed’:
try {
if (!(usrDAO.isValidUserAndPassword(txtUser.getText(), txtPsw1.getText()))) {
JOptionPane.showMessageDialog(this, "O login/senha atual não confere.", "Validação", JOptionPane.WARNING_MESSAGE);
txtPsw1.requestFocus();
txtPsw1.selectAll();
return;
}
int result = JOptionPane.showConfirmDialog(this, "Confirma os dados ?", "Salvar alterações", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if (result != 0) {
return;
}
usrInEdit.setLogin(txtUser.getText());
usrInEdit.setPsw(txtPsw3.getText());
usrDAO.updateUser(usrInEdit);
JOptionPane.showMessageDialog(this, "Dados alterados com sucesso.");
So ta aparecendo no seu codigo linha 1 a linha 29. Mas tenta o seguinte, tenta trocar o:
if (result != 0)
por
if (result == JOptionPane.OK_OPTION)
Até +.[/quote]
Essas expressões são equivalentes (JOptionPane.OK_OPTION == 0).
[Desculpe, eu editei a mensagem pra encurtar, e não reparei que não temos mais as linhas 30 a 43.]
Então, o único problema que estou tendo é o de ‘pegar’ a senha no BD (via DAO) e devolvê-la para ser comparada com a senha digitada (vide linha 7).[/quote]