Inserir dados no banco a partir de uma List

5 respostas
C

Pessoal, tenho o método abaixo que uso para listar dados de uma tabela temporária e exibir para o usuário verificar se tem algum erro, antes de inserir da tabela real onde os dados precisam estar.

..bom tenho dúvida de como pegar os dados dessa lista temp e inserir da minha outra tabela a lógica no metodo.

public List<campanha> listarDataTemp() {
       try {
            conn = (Connection) ConnectionFactory.getConnection();
            String sql = "Select * from temp";
            PreparedStatement stmt = conn.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();
            List<campanha> lista = new ArrayList();

            while (rs.next()) {
                campanha c = new campanha();
             //   c.setId(rs.getInt(1));
                c.setConcessao(rs.getString(1));
                c.setModelo(rs.getString(2));
                c.setItem(rs.getString(3));
                c.setCodigo(rs.getString(4));
                c.setPreco(rs.getString(5));
                c.setMo(rs.getString(6));
                c.setMes(rs.getString(7));
                lista.add(c);
            }
            rs.close();
            return lista;
        } catch (Exception ex) {
            Logger.getLogger(campanhaDaoMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;

    }

5 Respostas

L

Não seria:

ArrayList<campanha> lista = new ArrayList<campanha>();

Não sei se seria isso o erro.
Poderia mostrar o log? ou falar aonde está dando?

C

leandrofloripa,

não está dando erro não, esse método acima funciona normal, ele lista os dados da minha tabela temporária, o que eu preciso é pegar esses dados da lista e inserir em outra tabela.

E

1ª sugestão:

usar PreparedStatement com addBatch para inserir os dados na tabela final.

2ª sugestão

insert into tabelafinal select * from tabelatemporaria
C
evefuji:
1ª sugestão:

usar PreparedStatement com addBatch para inserir os dados na tabela final.

2ª sugestão

insert into tabelafinal select * from tabelatemporaria

Cara vc já fez alguma vez essa segunda sugestão???

Será que não consigo fazer usando um for por exemplo?

..
 try {
           
            campanhaDaoMysql cDao = new campanhaDaoMysql();
            List<campanha> lista = cDao.listarDataTemp();

            for(campanha c: lista){
               
            .....?
            cDao.CadastrarCamapanha(c);
            }

        } finally { 
            out.close();
        }
E

eu sempre uso essa segunda sugestão que te passei. No caso, você usaria o executeUpdate do seu Statement. (é bem mais rápido que rodar o insert linha a linha). O que pode impedir a segunda opção de funcionar perfeitamente é o tamanho do spool do seu banco de dados, mas nesse caso, você poderia particionar a lógica de insert em uns dois ou três inserts dependendo do caso (filtrando resultados no select), roda uma instrução de insert assim em um cliente SQL e você vai ver como funciona.

Sobre a sua segunda pergunta, claro que consegue fazer com um for. Mas como eu disse na primeira sugestão, usar um addBatch (teria que ser num looping, tipo o for) no PreparedStatement vai ter melhor efeito.

Criado 30 de novembro de 2011
Ultima resposta 30 de nov. de 2011
Respostas 5
Participantes 3