Baseado na apostila 21 da Caelum, como eu posso checar se um usuário existe antes de insrir no BD?
Eu faço a consulta e se o usuário existe tenho que encaminhar a pessoa pra outra página diferente, esse é o problema.
No controller está assim:
@RequestMapping("adicionaUsuario")
public String adiciona(@Valid Usuario usuario, Model model, BindingResult result) {
model.addAttribute("url_active", "listaUsuarios");
// controle de exceção, se der erro (BindingResult), volta pro formulário
if (result.hasErrors()) { // erro no formulario inteiro
return "usuario-formulario";
}
UsuarioDAO dao = new UsuarioDAO();
dao.adiciona(usuario);
return "usuario-adicionado";
}
No DAO está assim:
public Usuario adiciona(Usuario usuario) {
String sqlCheck = "SELECT usuario FROM usuarios WHERE usuario = ?";
try {
PreparedStatement stmtCheck = this.connection.prepareStatement(sqlCheck);
stmtCheck.setString(1, usuario.getUsuario());
ResultSet rsCheck = stmtCheck.executeQuery();
if (rsCheck.next()) {
stmtCheck.close();
System.out.println("Esse usuário já existe.");
return null;
} else {
String sql = "INSERT INTO usuarios (nome, sobrenome, usuario, senha, data) VALUES (?, ?, ?, ?, ?)";
// prepared statement para inserção
PreparedStatement stmt = this.connection.prepareStatement(sql);
Calendar calendar = Calendar.getInstance(); // pega a data atual
Date data = new Date(calendar.getTimeInMillis());
// seta os valores
stmt.setString(1, usuario.getNome());
stmt.setString(2, usuario.getSobrenome());
stmt.setString(3, usuario.getUsuario());
stmt.setString(4, usuario.getSenha());
stmt.setDate(5, data);
// executa
stmt.execute();
stmt.close();
return usuario;
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
Ou seja quando dá erro e retorna null e quando o usuário é inserido ele me retorna o usuário.
Agora como faço o controller diferenciar isso e ir pra urls diferentes?
Tentei algo do tipo no controller mas não funcionou:
UsuarioDAO dao = new UsuarioDAO();
dao.adiciona(usuario);
if(dao.equals(null)) {
return "usuario-erro";
} else {
return "usuario-adicionado";
}
