Dúvida em sintaxe SQL - select no prepareStatement[RESOLVIDO]

Olá, bem… estou fazendo um projeto pra faculdade sobre DOAÇÃO DE ÓRGÃOS, tenho que fazer alguns comandos através de java, e só meu select tá dando pau
to usando o MySQL, e tenho 4 tabelas, DOADOR, RECEPTOR, ORGAO e ESTOQUE

ESTOQUE recebe 3 chaves estrangeiras, uma de cada uma das outras tabelas
select de doador, órgão e receptor já fiz, está funcionando… .mas estoque estou perdida com as chaves estrangeiras

dois comandos de select que tenho que fazer:
listar tudo de ESTOQUE
listar nome de órgão e receptor de ESTOQUE através do doador, que meu usuário vai entrar com a id

segue abaixo os códigos:

CLASSE ESTOQUE

public class Estoque {

	
	private int esId;
	private Doador doador;
	private Receptor receptor;
	private Orgao orgao;
//gets e sets

PARA LISTAR TUDO


	public List<Estoque> getLista() {

		try {
			List<Estoque> dados = new ArrayList<Estoque>();
                        //DÚVIDA NA SINTAXE DESTE COMANDO...COMO REFERENCIAR MINHAS CHAVES NESTE COMANDO??
			PreparedStatement ps = this.connection.prepareStatement("select * from estoque ????????????????");
			
			ResultSet rs = ps.executeQuery(); // ponteiro, associado ao metodo
												// executeQuery(), faz uma busca
												// nos contatos
			while (rs.next())// result set associado ao metodo next aponta ao
								// próximo da tabela enquanto houver cadastros
			{
				Estoque estoque = new Estoque();
				
				Orgao orgao = new Orgao();
				orgao.setOrgId(rs.getInt("o.orgId"));
				estoque.setOrgao(orgao);
				
				Receptor receptor = new Receptor();
				receptor.setReId(rs.getInt("r.reId"));
				estoque.setReceptor(receptor);
				
				Doador doador = new Doador();
				doador.setDoId(rs.getInt("d.doId"));
				estoque.setDoador(doador);
				
				estoque.setEsId(rs.getInt("esId"));
				dados.add(estoque);

			}

			rs.close();
			ps.close();

			return dados;

		} catch (SQLException e) {
			
			throw new RuntimeException(e);
		}

	}

PARA TESTAR LISTAR TUDO

		try{
			
			EstoqueDAO dao = new EstoqueDAO();
			List<Estoque> dados = dao.getLista();
			
			for(Estoque estoque : dados){
				
				//CHAVE PRIMÁRIA
				System.out.println("Id estoque: " + estoque.getEsId());
				//CHAVES ESTRANGEIRAS
				System.out.println("Id doador: " + estoque.getDoador().getDoId());
				System.out.println("Id receptor: " + estoque.getReceptor().getReId());
				System.out.println("Id orgao: " + estoque.getOrgao().getOrgId() + "\n");
				
			}
			System.out.println("");
			System.out.println("FIM DA LISTA");
			
		}catch(Exception e){ System.out.println(e); }
	}

PARA LISTAR ATRAVÉS DO DOADOR

	public List<Estoque> getLista(int idDo) {

		try {
			List<Estoque> cadastros = new ArrayList<Estoque>();
                       //QUANDO TENTO EXECUTAR ESTE COMANDO ELE ME IMPRIME UMA LISTA GIGANTE SEM SENTIDO
			PreparedStatement ps = this.connection.prepareStatement("select r.reNome, o.orgNome from receptor r, orgao o, estoque e, doador d where e.esReId=r.reId and e.esOrgId=o.orgId and e.esDoId=?");
			
			ps.setInt(1, idDo);

			ResultSet rs = ps.executeQuery(); // ponteiro, associado ao metodo
												// executeQuery(), faz uma busca
												// nos contatos
			while (rs.next())// result set associado ao metodo next aponta ao
								// próximo da tabela enquanto houver cadastros
			{
				Estoque estoque = new Estoque();
				
				Orgao orgao = new Orgao();
				orgao.setOrgNome(rs.getString("o.orgNome"));
				estoque.setOrgao(orgao);
				
				Receptor receptor = new Receptor();
				receptor.setReNome(rs.getString("r.reNome"));
				estoque.setReceptor(receptor);
				
				
				
				cadastros.add(estoque);

			}

			rs.close();
			ps.close();

			return cadastros;

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}

	}

PARA TESTAR LISTAR ATRAVÉS DO DOADOR

try{
			
			EstoqueDAO dao = new EstoqueDAO();
			List<Estoque> dados = dao.getLista();
			
			for(Estoque estoque : dados){
				
				System.out.println("Nome receptor: " + estoque.getReceptor().getReNome());
				System.out.println("Nome orgao: " + estoque.getOrgao().getOrgNome() + "\n");
				
			}
			System.out.println("");
			System.out.println("FIM DA LISTA");
			
		}catch(Exception e){ System.out.println(e); }
	}

Obrigada pessoal!

Qual o problema? Post o stacktrace do erro.

Uma forma de fazer isso é unindo todas as tabelas necessárias e adicionando nome de colunas que deseja trabalhar, fiz teu select com inner join dê uma olhada, teste buscando apenas nome das colunas que estão na projeção abaixo:

SELECT estoque.id, doador.nome, orgao.nome, receptor.nome FROM estoque INNER JOIN join doador ON estoque.esdoid = doador.id INNER JOIN join recepetor ON estoque.esreid = receptor.id INNER JOIN join orgao ON estoque.esorgid = orgao.id

OBRIGADÃOOOO

Segui a sua linha com o inner join… eu sabia da existência e que podia tentar fazer com inner join, mas não sabia muito bem a sintaxe e muito menos mexendo com essas chaves estrangeiras

deu certinho aqui :smiley:

Só para constar… tá aí como fiz tudo:

Assim para listar tudo:

PreparedStatement ps = this.connection.prepareStatement("select estoque.esId, doador.doId, receptor.reId, orgao.orgId from estoque inner join doador on estoque.esDoId = doador.doId inner join receptor on estoque.esReId = receptor.reId inner join orgao on estoque.esOrgId = orgao.orgId");
	

E assim para listar a partir da pesquisa por doador

PreparedStatement ps = this.connection.prepareStatement("select receptor.reNome, orgao.orgNome from estoque inner join receptor on estoque.esReId = receptor.reId inner join orgao on estoque.esOrgId = orgao.orgId where estoque.esDoId = ?");

OBRIGADAAA :lol: :smiley: :slight_smile:

Que bom que deu certo, uma dica legal, use o site Instant SQL Formatter pra formatar suas SQL’s, olhe como ficaria a sua:

[code]StringBuffer var1 = new StringBuffer();
var1.append("SELECT estoque.esid, “);
var1.append(” doador.doid, “);
var1.append(” receptor.reid, “);
var1.append(” orgao.orgid ");
var1.append("FROM estoque “);
var1.append(” INNER JOIN doador “);
var1.append(” ON estoque.esdoid = doador.doid “);
var1.append(” INNER JOIN receptor “);
var1.append(” ON estoque.esreid = receptor.reid “);
var1.append(” INNER JOIN orgao “);
var1.append(” ON estoque.esorgid = orgao.orgid ");

PreparedStatement ps = this.connection.prepareStatement(var.1toString());

[/code]

Visibilidade bem melhor não acha?

opaaaa… valeu, essa é nova, não sabia dessa… vou usar sim!! brigadaa de novo ¬¬