Problema para retornar listas de duas tabelas

4 respostas
T

Boa noite pessoal;

Sou novo na programação em Java e estou com um problema para fazer um Select com dados de duas tabelas.
Tenho uma tabela Processos, com dados básicos e outra ProcessosDestaque, com dados mais específicos. Preciso fazer um select que chame algumas colunas dos dados básicos e outras dos dados específicos. Tentei fazer uma lista, mas só consigo chamar os dados de apenas uma tabela.
Na primeira tabela Processos, tenho as seguintes colunas: codGeral, classeProc, numProc, autorProc, ResumoProc.
A tabela ProcessosDestaque possui as seguintes colunas: codDest, codGeral(chave estrangeira), ementaProc, dispProc.
O método listarDest está assim:

public List listarDest()

{

List lst= new ArrayList<>();

List lstDest = newArrayList<>();
try

{

stmt = con.prepareStatement(SELECT codigoGeral.Processos, classe.Processos, numProc.Processos, autor.Processos, codDest.ProcessosDestaques, ementaProc.ProcessosDestaque FROM ProcessosDestaque JOIN Processos ON ProcessosDestaque.codGeral = Processos.codGeral);

rs = stmt.executeQuery();

while(rs.next())

{

ProcDestaques procdestaques = new ProcDestaques();

Proc proc = new Proc();
procdestaques.setCodDest(rs.getInt(1));

procdestaques.setCodGeral(rs.getInt(2));

proc.setClasse(rs.getString(3));

proc. setNumProc(rs.getString(4));

proc.setAutor(rs.getString(5));

procdestaques.setEmentaProc(rs.getString(6));

lstDest.add(procdestaques);
lst.add(proc);

}

stmt.execute();

rs.close();

con.close();
}

catch (SQLException e)

{

throw new RuntimeException(e);

}

return lstDest;
}

Alguém tem ideia de como fazer para o select retornar os dados das duas tabelas?
Valew!

4 Respostas

S

Você pode usar o próprio o select * do sql, mas na hora de pegar os resultados, você escolheria o que pegar.

Nota: você está pegando de forma errada no try, seria o seguinte:

procdestaques.setCodDest(rs.getInt("< nome da coluna>"));

Ex: d.setNome(rs.getString("nome"));

darlan_machado

Cara, essa query tá meio estranha, não?
Você disse que tem duas tabelas, Processos e ProcessosDestaque, certo?
Ao invés disso:

SELECT codigoGeral.Processos, classe.Processos, numProc.Processos, autor.Processos, codDest.ProcessosDestaques, ementaProc.ProcessosDestaque FROM ProcessosDestaque JOIN Processos ON ProcessosDestaque.codGeral = Processos.codGeral

Tem mesmo certeza que o código acima funciona? Pergunto pois, em geral, uma query vai trazer os dados baseados em “NOME_TABELA_OU_VIEW”.“NOME_DA_COLUNA” e não o contrário, como está aí.
Eu faria algo como

SELECT p.codigoGeral, p.classe, p.numProc, p.autor, pd.codDest, pd.ementaProc 
FROM ProcessosDestaque pd
JOIN Processos p ON pd.codGeral = p.codGeral

Isso deve retornar os dados das duas tabelas (processos e processosdestaque), especificamente, o codigoGera, a classe, o numProc, autor, que são da tabela processos e codDest e ementaProc da tabela processosdestaque.

Outra coisa errada é que você está fechando as coisas no try, isso é uma prática ruim, afinal, se houver exceção, você manterá conexão e resultset abertos.

O ideal seria incluir um bloco finally e fechar tudo nele.

finally {
    //Fecha as coisas aqui
}
T

Valeu Darlan;

Depois de muitas horas trabalhar horas trabalhando no projeto com muitas tabelas, sabia que uma hora ia dar tilt e cometer um erro básico. Problema solucionado.

Administrador, pode marcar como resolvido.

darlan_machado

Ao longo do tempo, não como desenvolvedor, mas como profissional, descobri que aquela pausa pra um café, pra um cigarro (se você fuma, lógico), pra um suco se é fitness ou só para tomar um ar, é fundamental para resolver problemas.
Pra ter uma ideia,eu já saí tão atordoado do meu note no trabalho, que fui pegar um suco e na hora de informar o CPF eu passei o RG pra caixa…

Criado 3 de fevereiro de 2018
Ultima resposta 10 de fev. de 2018
Respostas 4
Participantes 3