Duvida iniciante, referente a banco

7 respostas
zehnogueira

tenho que fazer a integraçao do ERP (oracle ) pro novo site (SQLServer) via java.

faço um select no oracle e dentro do laço que crio vou dando insert, soh que a cada insert crio uma nova conexao e acabo derrubando a porta do servidor SQLserver qndo atinjo um numero x de insert, ja analisei e refiz meu codigo milhoes de vezes, se alguem conseguir ajudar agradeço vou mandar um resumo do codigo:
//classe que faz o select e monta o laço

public void selecionaDadosUsu_TproSit() throws SQLException{
           this.connectionOracle = conexaoOracle.getConnection();
           sql =  "SELECT codpro,   bla bla   ";

           PreparedStatement stmOracle = this.connectionOracle.prepareStatement(sql);
           try {
               ResultSet rs = stmOracle.executeQuery(sql);
               while(rs.next()){
                  String codpro = rs.getString("codpro");
                  testeInclusaoDao inclusao = new testeInclusaoDao();
                  tbImportProducts tst = new tbImportProducts();
                  tst.setIdProduct(codpro);

                  //chamo a classe que insere no SQLserver
                  inclusao.adicionaTeste(tst);
               }
           } catch (Exception e){
               System.out.print(e.getMessage());
           }
    }

/// classe que faz a inserçao
public void adicionaTeste(tbImportProducts incluiProduto) throws SQLException{
        //System.out.println(connectionMsSql.isClosed());
        this.connectionMsSql = conexao.getConnection();
        System.out.println(connectionMsSql);
        sqlAux = "insert   into   bla bla bla   ";
        PreparedStatement stmMsSql = this.connectionMsSql.prepareStatement(sqlAux);
        try {
            stmMsSql.setString(1, incluiProduto.getIdProduct());
            stmMsSql.execute();
            connectionMsSql.isClosed();
            fechaConexaoMsSql();
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

//minha conexao
     public static Connection getConnection() throws SQLException {
        try {
    //        System.out.println("iniciando conexao ao banco!! ");
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      //      System.out.println("Conectando ao banco Teste_junior ");
            return DriverManager.getConnection(
                    "jdbc:sqlserver://localhost:1433;databaseName=TESTE_SITE;selectMethod=cursor;",
                    "livrarias",
                    "livrarias");
        } catch (ClassNotFoundException e) {
            throw new SQLException(e.getMessage());
        }
    }

7 Respostas

emmanuelrock

Já experimentou fechar a conexão após executar todos os inserts (fora do laço)? E antes de fechar o legal é dar um commit. Adicione uma estrutura finally, e dentro dela você pode/deve fechar a conexão, resultSet e statement. Abraço.

Ex:
try{

}catch Exceção{

}finally{
//feche as estruturas (conexão, resultSet e statement)aqui
}
zehnogueira

The TCP/IP connection to the host has failed. java.net.BindException: Address already in use: connect

continua dando erro, acho que o problema sao as quantidades de conexoes que ele cria. parece que nao esta fechando elas…

abrxxx

emmanuelrock

Ah tá! Crie a conexão fora o método. Co loque a conexão como atributo da classe, e instancie no construtor. Daí é só usar a conexão no escopo de membro de classe. O problema é que você está criando conexões a cada inserção. Dica: crie uma classe de Conexão, nela terá apenas o que é referente à conxão em si, isso influi no conceito de alta coesão.

zehnogueira

quando dou esse comando será que ele cria uma nova conexão?

PreparedStatement stmMsSql = this.connectionMsSql.prepareStatement(sqlAux);

zehnogueira

consegui corrigir velhinho, eu estava estanciando o mesmo metodo, marcaçao total…

valeu aw brother…

abrxxx

emmanuelrock

Não. Quando este comando é executado você já tem uma conexão criada, senão uma exceção seria lançada. A conexão é criada em this.connectionMsSql = conexao.getConnection();

emmanuelrock

Cara estude sobre classes de conexão (Singletons) e crie uma classe sua para esse propósito. Você podera reaproveitá-la para qualquer SGBD, só vai depender do Driver e String de Conexão.

Criado 30 de outubro de 2009
Ultima resposta 30 de out. de 2009
Respostas 7
Participantes 2