Dúvidas com addBatch() e executeBatch()

3 respostas
MarcioProgramador

Posso utilizar os métodos addBatch() e executeBatch() para simplesmente trazer resultados de uma consulta com select no meu banco de dados?Ou alguém já fez isso? Pesquisei um pouco por isso na internet mas só encontrei exemplos que demonstravam a utilização deles para se fazer uma inserção em tabelas. Preciso saber pois senão teria que escrever código que me faria exigir o máximo da máquina em termos de recursão (muitos laços do tipo for). Obrigados a todos! :slight_smile:

3 Respostas

ViniGodoy

Eles são só para consultas de atualização mesmo, por isso o termo executeBatch.

Se você rodasse um conjunto de selects, como ele saberia quais das tabelas retornar?

Se você quer juntar a linha de várias consultas iguais, use a clausula UNION no seu SQL:

SELECT id, nome FROM tblUsuarios
UNION SELECT id, nome FROM tblUsuarioExcluidos;

MarcioProgramador

Hum..putz... isto quer dizer que não é possivel? porque tipo... eu tenho um método escrito que me retorna uma somatória de um valor de um determinado campo mediante a variação de um contador que eu estipulei....

olha o código
public String listarAsRespostasDaTerceiraQuestao(int cont) throws SQLException
    {
        String aux[] = selecionarOsCampos();
        String resp = "";

        switch(cont)
        {
            case 0:
                for(int i = 0; i < aux.length; i++)
                {
                    if(aux[i].equals("resp_camp_1c"))
                    {
                        String sql = "select count(resp_camp_1c) as resp_camp_1c from mdl_dev_tb_quest_entrada_pag2 where resp_camp_1c like " + cont;
                        PreparedStatement stm = c.prepareStatement(sql);
                        ResultSet rs = stm.executeQuery();
                        while(rs.next())
                        {
                            resp = "Não responderam = "+ rs.getInt(aux[i]);
                        }
                    }
                }break;
            case 1:
                for(int i = 0; i < aux.length; i++)
                {
                    if(aux[i].equals("resp_camp_1c"))
                    {
                        String sql = "select count(resp_camp_1c) as resp_camp_1c from mdl_dev_tb_quest_entrada_pag2 where resp_camp_1c like " + cont;
                        PreparedStatement stm = c.prepareStatement(sql);
                        ResultSet rs = stm.executeQuery();
                        while(rs.next())
                        {
                            resp = "feminino = "+ rs.getInt(aux[i]);
                        }
                    }
                }break;
            case 2:
                for(int i = 0; i < aux.length; i++)
                {
                    if(aux[i].equals("resp_camp_1c"))
                    {
                        String sql = "select count(resp_camp_1c) as resp_camp_1c from mdl_dev_tb_quest_entrada_pag2 where resp_camp_1c like " + cont;
                        PreparedStatement stm = c.prepareStatement(sql);
                        ResultSet rs = stm.executeQuery();
                        while(rs.next())
                        {
                            resp += "masculino = "+ rs.getInt(aux[i]);
                        }
                    }
                }break;

        }
        return resp;
    }
No caso entao não poderia colocar o batch para dentro do for de forma que ele entendesse cada variação como uma consulta em separado? Algo tipo isso :
for (cont = 0; cont <= 2; cont++ )
{
String sql = "select count(resp_camp_1c) as resp_camp_1c from mdl_dev_tb_quest_entrada_pag2 where resp_camp_1c like " + cont;
stm.addBatch(); // não reparem que nao escrevi todo o código :) 
}

posso fazer isso?

bruno.fantin

Ver se um select assim te ajuda.

select resp_camp_1c, count(resp_camp_1c) as resp_camp_1c
from mdl_dev_tb_quest_entrada_pag2
group by resp_camp_1c

Roda direto no banco ( Isso é, fora do Java ) e ver se é esse resultado que você quer.

Falou.

Criado 19 de abril de 2010
Ultima resposta 19 de abr. de 2010
Respostas 3
Participantes 3