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();