Problemas em inserir muitos dados no banco

2 respostas
joede.fadel

Estou com o seguinte problema, tenho que fazer uma importação de dados de uma base Firebird para outra Mysql… Tenho a tabela de produtos tem muitos registros, na hora que estou realizando a importação dá o seguinte erro:

java.sql.SQLException: java.lang.OutOfMemoryError: Java heap space

Bem… estou estourando a memória…

O meu código abaixo mostra o trexo onde estou realizando a inserção, estou utilizando o addBatch e a cada 1000 registros faço um executeBatch para inserir as informações no banco, a minha duvida é o seguinte teria uma forma melhor de fazer essa importação?

for (ProdutoVO produtoVO : produtoVOList) {
                qtdDados++;
                int qtd = 0;
                Statement st = (Statement) conn.createStatement();
                ResultSet rs = st.executeQuery("SELECT COUNT(1) FROM produto WHERE ID = " + produtoVO.getId());
                if (rs != null) {
                    if (rs.next()) {
                        qtd = rs.getInt(1);
                    }
                }
                if (qtd == 0) {
                    ps = conn.prepareStatement("INSERT INTO produto "
                            + "(NOME, ID) "
                            + "VALUES (?,?);");
                } else {
                    ps = conn.prepareStatement("UPDATE produto "
                            + "SET NOME = ? "
                            + "WHERE ID = ?;");
                }
                ps.setString(1, produtoVO.getDescricao());
                ps.setInt(2, produtoVO.getId());
                ps.addBatch();
                if (qtdDados == 1000) {
                    ps.executeBatch();       
            
                }
            }
            ps.executeBatch();
            conn.commit();

2 Respostas

Hebert_Coelho

Tenta tazer o conn.commit(); após 1000 tb junto com um flush().

romarcio

Depois de inserir um quantidade X de dados, faz um

if (qtdDados == 1000) { ps.executeBatch(); ps.clearBatch(); }

Assim vai limpar os objetos que estão na memoria do Statement. Deve resolver o problema.

Criado 15 de abril de 2012
Ultima resposta 15 de abr. de 2012
Respostas 2
Participantes 3