Olá a todos estou com uma dúvida na validação no atualizar.
O que quero fazer é algo assim:
Deixar atualizar o mesmo login, mas se atualizar e tiver o mesmo nome de login em outra linha da tabela ele não pode atualizar.
Tenho as seguintes classes:
Servlet Usuario
package servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import beans.BeanCursoJsp;
import dao.DaoUsuario;
@WebServlet("/salvarUsuario")
public class Usuario extends HttpServlet {
private static final long serialVersionUID = 1L;
private DaoUsuario daoUsuario = new DaoUsuario();
public Usuario() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String acao = request.getParameter("acao");
String user = request.getParameter("user");
if (acao.equalsIgnoreCase("delete")) {
daoUsuario.delete(user);
RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
request.setAttribute("usuarios", daoUsuario.listar());
view.forward(request, response);
} else if (acao.equalsIgnoreCase("editar")) {
BeanCursoJsp beanCursoJsp = daoUsuario.consultar(user);
RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
request.setAttribute("user", beanCursoJsp);
request.setAttribute("usuarios", daoUsuario.listar());
view.forward(request, response);
} else if (acao.equalsIgnoreCase("listartodos")) {
RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
request.setAttribute("usuarios", daoUsuario.listar());
view.forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String acao = request.getParameter("acao");
if (acao != null && acao.equalsIgnoreCase("reset")) {
try {
RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
request.setAttribute("usuarios", daoUsuario.listar());
view.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
} else {
String id = request.getParameter("id");
String login = request.getParameter("login");
String senha = request.getParameter("senha");
String nome = request.getParameter("nome");
String fone = request.getParameter("fone");
String cep = request.getParameter("cep");
String rua = request.getParameter("rua");
String bairro = request.getParameter("bairro");
String cidade = request.getParameter("cidade");
String estado = request.getParameter("estado");
String ibge = request.getParameter("ibge");
BeanCursoJsp usuario = new BeanCursoJsp();
usuario.setId(!id.isEmpty() ? Long.parseLong(id) : null);
usuario.setLogin(login);
usuario.setSenha(senha);
usuario.setNome(nome);
usuario.setFone(fone);
usuario.setCep(cep);
usuario.setRua(rua);
usuario.setBairro(bairro);
usuario.setCidade(cidade);
usuario.setEstado(estado);
usuario.setIbge(ibge);
try {
String msg = null;
boolean podeInserir = true;
// validando se o login senha nome e telefone serão vazios
if (login == null || login.isEmpty()) {
msg = "Login deve ser informado";
podeInserir = false;
} else if (senha == null || senha.isEmpty()) {
msg = "Senha deve ser informada";
podeInserir = false;
} else if (nome == null || nome.isEmpty()) {
msg = "Nome deve ser informada";
podeInserir = false;
} else if (fone == null || fone.isEmpty()) {
msg = "Teleforna deve ser informada";
podeInserir = false;
}
else if (id == null || id.isEmpty() && !daoUsuario.validarLogin(login)) {// QUANDO FOR USUÁRIO NOVO,
// validando se existir
// usuario iguais
msg = "Usuário já existe com o mesmo login!";
podeInserir = false;
} else if (id == null || id.isEmpty() && !daoUsuario.validarSenha(senha)) {// QUANDO FOR USUÁRIO NOVO
msg = "\n A senha já existe para outro usuário!";
podeInserir = false;
}
if (msg != null) {
request.setAttribute("msg", msg);
} else if (id == null || id.isEmpty() && daoUsuario.validarLogin(login) && podeInserir) {
daoUsuario.salvar(usuario);
} else if (id != null && !id.isEmpty()) {
if (daoUsuario.validarLogin(login) == false) {
msg = "Usuário já existe com o mesmo login!";
podeInserir = false;
} else {
daoUsuario.atualizar(usuario);
}
}
if (!podeInserir) {
request.setAttribute("user", usuario);
}
RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
request.setAttribute("usuarios", daoUsuario.listar());
request.setAttribute("msg", msg);
view.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
} // fim do else
}// fim doPost
}
Tenho o DaoUsuario
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import beans.BeanCursoJsp;
import conection.SigleConnection;
public class DaoUsuario {
private Connection connection;
public DaoUsuario() {
connection = SigleConnection.getConnection();
}
public void salvar(BeanCursoJsp usuario){
try {
String sql = "insert into usuario(login, senha, nome, fone, cep, rua, bairro, cidade, estado, ibge) "
+ "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement insert = connection.prepareStatement(sql);
insert.setString(1, usuario.getLogin());
insert.setString(2, usuario.getSenha());
insert.setString(3, usuario.getNome());
insert.setString(4, usuario.getFone());
insert.setString(5, usuario.getCep());
insert.setString(6, usuario.getRua());
insert.setString(7, usuario.getBairro());
insert.setString(8, usuario.getCidade());
insert.setString(9, usuario.getEstado());
insert.setString(10, usuario.getIbge());
insert.execute();
connection.commit();
}catch (Exception e) {
e.printStackTrace();
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
public List<BeanCursoJsp> listar() throws Exception{
List<BeanCursoJsp> listar = new ArrayList<BeanCursoJsp>();
String sql = "select * from usuario";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()) {
BeanCursoJsp beanCursoJsp = new BeanCursoJsp();
beanCursoJsp.setId(resultSet.getLong("id"));
beanCursoJsp.setLogin(resultSet.getString("login"));
beanCursoJsp.setSenha(resultSet.getString("senha"));
beanCursoJsp.setNome(resultSet.getString("nome"));
beanCursoJsp.setFone(resultSet.getString("fone"));
beanCursoJsp.setCep(resultSet.getString("cep"));
beanCursoJsp.setRua(resultSet.getString("rua"));
beanCursoJsp.setBairro(resultSet.getString("bairro"));
beanCursoJsp.setCidade(resultSet.getString("cidade"));
beanCursoJsp.setEstado(resultSet.getString("estado"));
beanCursoJsp.setIbge(resultSet.getString("ibge"));
listar.add(beanCursoJsp);
}
return listar;
}
public void delete(String id) {
try {
String sql = "delete from usuario where id = '"+ id + "'";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.execute();
connection.commit();
}catch (Exception e) {
e.printStackTrace();
try {
connection.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public boolean validarLogin(String login) throws Exception {
String sql = "select count(1) as qtd from usuario where login = '" + login + "'";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
return resultSet.getInt("qtd") <= 0;//retorna true, inserir false não inserir
}
return false;
}
public boolean validarSenha(String senha) throws Exception {
String sql = "select count(1) as qtd from usuario where senha = '" + senha + "'";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
return resultSet.getInt("qtd") <= 0;
}
return false;
}
public BeanCursoJsp consultar(String id) throws Exception {
String sql = "select * from usuario where id = '" + id + "'";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
BeanCursoJsp beanCursoJsp = new BeanCursoJsp();
beanCursoJsp.setId(resultSet.getLong("id"));
beanCursoJsp.setLogin(resultSet.getString("login"));
beanCursoJsp.setSenha(resultSet.getString("senha"));
beanCursoJsp.setNome(resultSet.getString("nome"));
beanCursoJsp.setFone(resultSet.getString("fone"));
beanCursoJsp.setCep(resultSet.getString("cep"));
beanCursoJsp.setRua(resultSet.getString("rua"));
beanCursoJsp.setBairro(resultSet.getString("bairro"));
beanCursoJsp.setCidade(resultSet.getString("cidade"));
beanCursoJsp.setEstado(resultSet.getString("estado"));
beanCursoJsp.setIbge(resultSet.getString("ibge"));
return beanCursoJsp;
}
return null;
}
public void atualizar(BeanCursoJsp usuario) {
try {
String sql = "update usuario set login = ?, senha = ?, nome = ?, fone = ?, cep = ?, rua = ?, bairro = ?, "
+ "cidade = ?, estado = ?, ibge = ? where id = " + usuario.getId();
PreparedStatement preparedStetement = connection.prepareStatement(sql);
preparedStetement.setString(1, usuario.getLogin());
preparedStetement.setString(2, usuario.getSenha());
preparedStetement.setString(3, usuario.getNome());
preparedStetement.setString(4, usuario.getFone());
preparedStetement.setString(5, usuario.getCep());
preparedStetement.setString(6, usuario.getRua());
preparedStetement.setString(7, usuario.getBairro());
preparedStetement.setString(8, usuario.getCidade());
preparedStetement.setString(9, usuario.getEstado());
preparedStetement.setString(10, usuario.getIbge());
preparedStetement.executeUpdate();
connection.commit();
}catch (Exception e) {
e.printStackTrace();
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}
Tenho as outras classes (de conexão e as páginas jsp), tudo está funcionando, como disse minha dúvida é nessa validação na parte do atualizar.
Pensei em fazer algo como:
String velhoLogin
String novoLogin
if(velhoLogin.equals(novoLogin)) { atualiza }
Só que quando se vai atualizar como é que recupera essa váriavel do velhoLogin?
Tem outra forma de fazer essa validação, pois quando entra nesse if:
if (daoUsuario.validarLogin(login) == false) {
msg = "Usuário já existe com o mesmo login!";
podeInserir = false;
} else {
daoUsuario.atualizar(usuario);
}
Ele não atualiza o mesmo login e se tirar o metodo validarLogin(login) ele pode colocar o mesmo login em outras linhas da tabela (isso que não quero).
Se alguém poder me ajudar agradeço.