Semeq
Junho 25, 2019, 1:00pm
#1
Bom eu tenho um metodo que valida o login
ele verifica se a senha e o login são iguais
se sim ele vai fazer um update na tabela mudando o status " ONLINE " para 1
eu estou tentando entender mais sobre commit
gostaria de saber se estou mt errado nesse metodo?
como eu conseguiria fazer o rollback também
ficaria grato.
METODO:
public boolean validarSenha(Usuario u) {
String sql = "SELECT * FROM usuario where login = ? and senha = ?";
try {
this.con = new ConnectionFactory().getConnection();
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, u.getLogin());
stmt.setString(2, u.getSenha());
ResultSet rs = stmt.executeQuery();
if(rs.next()) {
Usuario usuarioLogado = new Usuario(
rs.getLong("id_usuario"),
rs.getString("login"),
rs.getString("senha"),
rs.getInt("idpermissao"),
rs.getString("nome"),
rs.getBoolean("online"));
con.setAutoCommit(false);
Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
String online = "UPDATE usuario SET online=1 WHERE id_usuario = " + Sessao.getInstancia().getUsuario().getId() + " ";
stmt2.executeUpdate(online);
con.commit();
aSessao.getInstancia().setUsuario(usuarioLogado);
stmt.close();
rs.close();
return true;
} else {
stmt.close();
rs.close();
return false;
}
} catch (SQLException ex) {
Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
O que vc precisa é entender um pouco sobre Transações : https://www.mkyong.com/jdbc/jdbc-transaction-example/
Semeq
Junho 25, 2019, 1:06pm
#3
Opa eu tinha esquecido de por o codigo
eu tou dando uma lida e tentando praticar e adequar o meu codigo, mas estou com algumas dificuldades.
Diga suas dificuldades que te ajudamos. (Se estiver dando algum erro, não esqueça de postar a exceção)
1 curtida
Semeq
Junho 25, 2019, 1:08pm
#5
opa não deu nenhum error
só queria saber se a forma em que eu fiz o metodo está correta ou tem como melhorar.
eu editei com o codigo.
ah e sobre o rollback não imaginei como aplicar isso nessa ocasião.
1 curtida
Semeq
Junho 25, 2019, 1:35pm
#6
Fiz algumas mudanças não sei qual é a melhor opção:
public boolean validarSenha(Usuario u) {
String sql = "SELECT * FROM usuario where login = ? and senha = ?";
try {
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, u.getLogin());
stmt.setString(2, u.getSenha());
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
Usuario usuarioLogado = new Usuario(rs.getLong("id_usuario"), rs.getString("login"), rs.getString("senha"), rs.getInt("idpermissao"), rs.getString("nome"), rs.getBoolean("online"));;
aSessao.getInstancia().setUsuario(usuarioLogado);
setOnline();
stmt.close();
rs.close();
return true;
}else{
stmt.close();
rs.close();
return false;
}
} catch (SQLException ex) {
Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
public void setOnline(){
String online = "UPDATE usuario SET online=1 WHERE id_usuario = " + Sessao.getInstancia().getUsuario().getId() + " ";
try {
con.setAutoCommit(false);
PreparedStatement stmt = con.prepareStatement(online);
stmt.executeUpdate(online);
con.commit();
} catch (SQLException ex) {
Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
try {
con.rollback();
} catch (SQLException ex1) {
Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex1);
}
}
}
1 curtida