Olá pessoal,
Estou querendo tirar uma dúvida, estou fazendo um acesso ao banco de dados Oracle através de uma classe de persistencia e uma classe de conexão que retorna um objeto do tipo Connection.
Persistência: Onde estão implementados os métodos de CRUD;
OracleConector: Classe que retorna a minha conexão.
Até aí tudo bem, funciona tudo perfeitamente. Mas eu queria saber se o que estou fazendo é correto.
Tenho uma classe chamada Operacao que faz a chamada para a Persistencia e passa um objeto para fazer uma inclusão no banco.
Na minha classe de Operacao tenho a seguinte operacao:
Persistencia per = new Persistencia();
vReturn = per.createUser(usuario);
o createUser da classe persistencia inclui os atributos do objeto usuario no banco e depois fecha a conexão.
Mas no metodo createUser da classe persistencia eu faço uma verificação para saber se o usuário já existe no banco em getIdUsuario. Ou seja abre um conexão dentro de uma conexão connectception. HUSHAUHS.
public String createUser(Usuario pUsuario) throws SQLException{
Connection conexao = null;
CallableStatement cs = null;
try{
conexao = new OracleConector().getConnection();
////// AQUI FAZ OUTRA VERIFCAÇÃO NO BANCO
int idUsuario = getIdUsuario(pUsuario.getLoginName());
//Se não existir esse usuario na base, permite criar
if(idUsuario == -1){
cs = conexao.prepareCall("{call PCK_INTEGRACAO.P_ADD_USER(?,?,?,?,?,?)}");
cs.setString(1, pUsuario.getLoginName()); //UserName
cs.setString(2, pUsuario.getPassword()); //Senha
cs.setInt (3, pUsuario.getIdEmpresa()); //Empresa
cs.setString(4, ""); //CdPerfilUsuario
cs.setString(5, pUsuario.getEmail()); //Email
cs.setString(6, pUsuario.getFirstName() + " " + pUsuario.getLastName());//NomeUsuario
cs.executeUpdate();
System.out.println("[SUCESSO]: Usuário incluido com sucesso!");
return "Usuario incluido com sucesso!";
}else{
System.out.println("[FALHA]: Já existe um usuário com essa identificação!");
return "Já existe um usuario com essa identificação";
}
}catch(SQLException e){
System.out.println("Erro: " + e);
System.out.println("[FALHA]: Não foi possível incluir o usuario.");
return "Erro: " + e;
}finally{
conexao.close();
System.out.println("***Conexão com o oracle fechada!***");
}
}
Ou seja eu faço uma verificação no banco abrindo uma nova conexão com o oracle dentro de um método onde a conexão já está aberta. Ou seja são criada duas conexões. Fiz dessa forma para o código ficar bem reutilizavel e não precisar a repetição do mesmo.
Conclusão. Posso ter duas conexões ao mesmo tempo aberta com o banco de dados? ou isso foge das boas práticas?
Lembrando que no final as duas são fechadas.
Obrigado desde já.