Ajuda com fluxo de conexão com banco de dados

4 respostas
Viniciustelles

Boa tarde, preciso de ajuda. Estou inserindo no banco alguns registros que estão em um list mas estou tendo problemas com o fluxo de conexão, consigo inserir somente uma parte pois a conexão para de responder na metade do processo :? já tentei chamar a conexão de fora do método com outro nome e etc... mas até agora não estou obtendo resultados positivos.

Esta é minha classe que estou populando os objetos.

public class LerXml implements Runnable {

    @Override
    public void run() {
        try {
            XStream xstream = new XStream(new Dom4JDriver());
            xstream.processAnnotations(MensagemSIB.class);

            BufferedReader input = new BufferedReader(new FileReader("c:\\fileTeste.xml"));
            MensagemSIB bl = (MensagemSIB) xstream.fromXML(input);
            List<Beneficiario> registros = bl.getMensagem().getAnsParaOperadora().getConferencia().getBeneficiarios();
            Operacoes con = new Operacoes();
            int tamanho = registros.size();
            for (int i = 0; i < tamanho; i++) {
                Endereco e = new Endereco();
                e.setBairro(registros.get(i).getEndereco().getBairro());
                e.setCep(registros.get(i).getEndereco().getCep());
                e.setCodigoMunicipio(registros.get(i).getEndereco().getCodigoMunicipio());
                e.setCodigoMunicipioResidencia(registros.get(i).getEndereco().getCodigoMunicipioResidencia());
                e.setComplemento(registros.get(i).getEndereco().getComplemento());
                e.setLogradouro(registros.get(i).getEndereco().getLogradouro());
                e.setNumero(registros.get(i).getEndereco().getNumero());
                e.setResideExterior(registros.get(i).getEndereco().getResideExterior());
                e.setTipoEndereco(registros.get(i).getEndereco().getTipoEndereco());
                Identificacao id = new Identificacao();
                id.setCpf(registros.get(i).getIdentificacao().getCpf());
                id.setDataNascimento(registros.get(i).getIdentificacao().getDataNascimento());
                id.setNome(registros.get(i).getIdentificacao().getNome());
                id.setNomeMae(registros.get(i).getIdentificacao().getNomeMae());
                id.setSexo(registros.get(i).getIdentificacao().getSexo());
                Vinculo v = new Vinculo();
                v.setCcoBeneficiarioTitular(registros.get(i).getVinculo().getCcoBeneficiarioTitular());
                v.setCnpjEmpresaContratante(registros.get(i).getVinculo().getCnpjEmpresaContratante());
                v.setCoberturaParcialTemporaria(registros.get(i).getVinculo().getCoberturaParcialTemporaria());
                v.setCodigoBeneficiario(registros.get(i).getVinculo().getCodigoBeneficiario());
                v.setDataCancelamento(registros.get(i).getVinculo().getDataCancelamento());
                v.setDataContratacao(registros.get(i).getVinculo().getDataContratacao());
                v.setDataReativacao(registros.get(i).getVinculo().getDataReativacao());
                v.setItensExcluidosCobertura(registros.get(i).getVinculo().getItensExcluidosCobertura());
                v.setMotivoCancelamento(registros.get(i).getVinculo().getMotivoCancelamento());
                v.setNumeroPlanoANS(registros.get(i).getVinculo().getNumeroPlanoANS());
                v.setNumeroPlanoOperadora(registros.get(i).getVinculo().getNumeroPlanoOperadora());
                v.setRelacaoDependencia(registros.get(i).getVinculo().getRelacaoDependencia());
                con.insereBeneficiario(e, id, v);
            }

            input.close();
        } catch (IOException e) {
        }
    }
}

este é meu método de inserir

public void insereBeneficiario(Endereco e,
            Identificacao id, Vinculo v) {
     Connection con = ConectaBanco.criaConexao();

        PreparedStatement ps = null;
        String sql = "INSERT INTO beneficiario VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )";
        try {
            ps =  con.prepareStatement(sql);
            ps.setString(1, id.getNome());
            ps.setString(2, id.getSexo());
            ps.setString(3, id.getCpf());
            ps.setString(4, id.getNomeMae());
            ps.setString(5, id.getDataNascimento());
            ps.setString(6, e.getLogradouro());
            ps.setString(7, e.getNumero());
            ps.setString(8, e.getBairro());
            ps.setString(9, e.getCodigoMunicipio());
            ps.setString(10, e.getCep());
            ps.setString(11, e.getTipoEndereco());
            ps.setString(12, e.getResideExterior());
            ps.setString(13, e.getComplemento());
            ps.setString(14, e.getCodigoMunicipioResidencia());
            ps.setString(15, v.getRelacaoDependencia());
            ps.setString(16, v.getCcoBeneficiarioTitular());
            ps.setString(17, v.getDataContratacao());
            ps.setString(18, v.getNumeroPlanoANS());
            ps.setString(19, v.getCoberturaParcialTemporaria());
            ps.setString(20, v.getItensExcluidosCobertura());
            ps.setString(21, v.getCnpjEmpresaContratante());
            ps.setString(22, v.getDataCancelamento());
            ps.setString(23, v.getMotivoCancelamento());
            ps.setString(24, v.getDataReativacao());
            ps.setString(25, v.getNumeroPlanoOperadora());
            ps.executeUpdate();
        } catch (SQLException ex) {
        } finally {
            fechaStatement(ps);
            fechaConexao(con);
        }
    }

e esta é minha saída de execução do programa

Banco conectado com sucesso!
Não foi possível conectar no banco
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
 
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458)
	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
	at java.sql.DriverManager.getConnection(DriverManager.java:579)
	at java.sql.DriverManager.getConnection(DriverManager.java:221)
	at br.com.businessflex.controller.ConectaBanco.criaConexao(ConectaBanco.java:23)
	at br.com.businessflex.controller.Operacoes.insereBeneficiario(Operacoes.java:24)
	at br.com.businessflex.model.LerXml.run(LerXml.java:58)
	at br.com.businessflex.model.Principal.main(Principal.java:11)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
 
	at oracle.net.ns.NSProtocol.connect(NSProtocol.java:395)
	at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
	... 10 more
Exception in thread "main" java.lang.NullPointerException
	at br.com.businessflex.controller.Operacoes.insereBeneficiario(Operacoes.java:29)
	at br.com.businessflex.model.LerXml.run(LerXml.java:58)
	at br.com.businessflex.model.Principal.main(Principal.java:11)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 17 minutos 9 segundos)

Gostaria de saber se tem uma forma de manter a conexão estável até o fim, desde já obrigado.

4 Respostas

fabiomedeirosf

Existe a inserção em batch do jdbc, acho que será mais indicada para vc, pois não precisa a cada iteração do ser for ir no BD, ele consegue fazer em lote.

Desta forma é muito mais eficiente e performático, dê um look: http://www.roseindia.net/jdbc/Jdbc-batch-insert.shtml, bem simples e direto este exemplo.

[]s

Viniciustelles

Infelizmente obtive o mesmo resultado :S

drsmachado

Ao que me parece, ele está permitindo apenas uma única conexão por vez e, esta bendita, está travando (uma transação pendente, talvez).
Isso o impede de prosseguir realizando as operações.

Viniciustelles

Opa, e como posso fazer para melhorar isso?

Criado 29 de junho de 2012
Ultima resposta 29 de jun. de 2012
Respostas 4
Participantes 3