Galera,
Estou desenvolvendo uma aplicação web em Java e costumo utilizar o sql diretamente no java através do JDBC.
Dessa vez quis mudar um pouco, em vez de executar selects, inserts, updates dentro do java eu desenvolvi toda regra de negócio e validações dentro do banco através de procedures e na aplicação eu apenas consumo essas procedures.
CREATE PROCEDURE autenticarUsuario @usuario NVARCHAR(32), -- [0] USUÁRIO NÃO AUTENTICADO
@senha NVARCHAR(32), -- [1] USUÁRIO AUTENTICADO
@retorno INT OUTPUT
AS
IF (SELECT COUNT(*) FROM loginUsuario WHERE usuario=@usuario AND senha=@senha) >= 1
SET @retorno = 1;
ELSE
SET @retorno = 0;
GO
public static Usuario autenticarUsuario(String usuario, String senha) throws SQLException {
Connection con = ConnectionFactory.getConnection();
CallableStatement cs = con.prepareCall("EXEC autenticarUsuario ?,?,?");
cs.setString(1,usuario);
cs.setString(2,senha);
cs.registerOutParameter(3,Types.NUMERIC);
cs.execute();
int codRetorno = cs.getInt(3);
if(codRetorno==0)
throw new AutenticacaoNaoAutorizada("Falha na autenticação");
ConnectionFactory.closeConnection(con,cs);
Login login = LoginDAO.getLogin(usuario,senha);
return UsuarioDAO.getUsuario(login.getId());
}
Isso fez surgir diversas dúvidas:
1) É uma boa abordagem manter toda regra de negocio e validações dentro do banco? No ambiente empresarial se usa dessa forma?
2) É normal minhas procedures retornarem códigos do tipo inteiro para informar possíveis erros ou sucesso na execução?
Exemplo: 1=sucesso, 2=cpf invalido, 3=usuario já existe, etc...
Obrigado!!