Inserir dados no banco a partir de uma List

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.

[code] public List listarDataTemp() {
try {
conn = (Connection) ConnectionFactory.getConnection();
String sql = “Select * from temp”;
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
List 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;

}[/code]

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?

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.

1ª sugestão:

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

2ª sugestão

insert into tabelafinal select * from tabelatemporaria

[quote=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?

[code]…
try {

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

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

    } finally { 
        out.close();
    }[/code]

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.