Conflito com sql e classes

Olá a todos, estou iniciando em java e tenho muita dificuldade em orientação a objeto. Preciso fazer uma listagem de produtos usando duas tabelas do bd.
Estou utilizando Postgresql 9 com pgadimIII.

No meu bd tenho as seguintes tabelas:

Produto:

CODPROD
DESCRICAO
EMBALAGEM
CODIGOBARRA
CODCATEG
DTCADASTRO
UNIDADE
CODFORNEC
DTEXCLUSAO
PCOMPRA
PVENDA

CODPROD primary_Key e CODFORNEC Foreign_key

e Fornecedor:

CODFORNEC
RAZAOSOCIAL
SEGUIMENTO
DTCADASTRO
FANTASIA
CODFORNEC Primary_key

Fiz a seguinte sql no próprio bd:

SELECT produto.*,"RAZAOSOCIAL" from  produto,fornecedor 
where fornecedor."CODFORNEC" = produto."CODFORNECPROD"

E ela me retornou o que eu quero, que são os dados do produto e a razão social do fornecedor.

Mas e agora em java?

tenho o seguinte método no dao Produto:

public static ArrayList<Produto> listar(){
    	try {
			conexao = Conexao.conectar();
			ArrayList<Produto> lista = null;
			String sql="SELECT produto.*,\"RAZAOSOCIAL\" from  produto,fornecedor 
                        where fornecedor.\"CODFORNEC\" = produto.\"CODFORNECPROD\"";
			PreparedStatement consulta = conexao.prepareStatement(sql);
			ResultSet resultado = consulta.executeQuery();
			lista = new ArrayList<Produto>();
			while(resultado.next()){

				  Produto produto = new Produto();
				  produto.setCodProduto(resultado.getInt("CODPROD"));
				  produto.setDescricao(resultado.getString("DESCRICAO"));
				  produto.setEmbalagem(resultado.getString("EMBALAGEM"));
				  produto.setCodigoBarra(resultado.getInt("CODIGOBARRA"));
				  produto.setCategoria(resultado.getInt("CODCATEG"));
				  produto.setDataCadastro(resultado.getDate("DTCADASTRO"));
				  produto.setUnidade(resultado.getString("UNIDADE"));
				  produto.setFornecedor(resultado.getInt("CODFORNECPROD"));
				  produto.setDataExclusao(resultado.getDate("DTEXCLUSAO"));
				  produto.setPrecoCompra(resultado.getDouble("PCOMPRA"));
				  produto.setPrecoVenda(resultado.getDouble("PVENDA"));
				  lista.add(produto);
			}
			return lista;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
    }

Como exibir a RAZAOSOCIAL do fornecedor na listagem desses produtos?

Como ficaria o método correto? isto vale nota e eu estou sem saber o fazer.

Obrigado pela colaboração!

Faça um novo fornecedor, set o valor da RSocial e depois produto.setFornecedor.

[=

Camarada, tua dificuldade não está apenas em orientação a objetos, mas em SQL também.
Existe, em SQL ANSI, algo chamado join com algumas variações (inner, right, left, outer) que permitem a consulta em várias tabelas, simultaneamente

SELECT p.CODPROD , 
p.DESCRICAO , 
p.EMBALAGEM , 
p.CODIGOBARRA , 
p.CODCATEG , 
p.DTCADASTRO , 
p.UNIDADE , 
p.CODFORNEC , 
p.DTEXCLUSAO , 
p.PCOMPRA , 
p.PVENDA,
f.RAZAOSOCIAL,
f.CODFORNEC
FROM produto p
INNER JOIN fornecedor f
ON
f.CODFORNEC = p.CODFORNEC;

Isso, por que, fazer

select * from
//ou
select produto.*

é muito lento e custoso para o banco de dados.
Já no java, você vai precisar apenas transformar essa query em String (ou em uma StringBuffer/StringBuilder):

StringBuffer query = new StringBuffer();
query.append("SELECT p.CODPROD , ");
query.append("p.DESCRICAO ,  ");
query.append("p.EMBALAGEM ,  ");
query.append("p.CODIGOBARRA ,  ");
query.append("p.CODCATEG ,  ");
query.append("p.DTCADASTRO ,  ");
query.append("p.UNIDADE ,  ");
query.append("p.CODFORNEC ,  ");
query.append("p.DTEXCLUSAO ,  ");
query.append("p.PCOMPRA ,  ");
query.append("p.PVENDA, ");
query.append("f.RAZAOSOCIAL, ");
query.append("f.CODFORNEC ");
query.append("FROM produto p ");
query.append("INNER JOIN fornecedor f ");
query.append("ON ");
query.append("f.CODFORNEC = p.CODFORNEC");

E

 
            PreparedStatement consulta = conexao.prepareStatement(query.toString());   
            ResultSet resultado = consulta.executeQuery();   

O restante do código, permanece o mesmo.

Quanto a exibir a razão social, você precisa entender que, diferente da PE (programação estruturada) uma classe java pode conter outra como atributo.
Assim sendo, eu criaria uma classe Fornecedor, com os mesmos atributos que são colunas no banco e alteraria o atributo fornecedor, da classe Produto, para o tipo Fornecedor.
Então, ao pegar o resultado:

Produto p = new Produto();
p.setFornecedor(new Fornecedor());
//e no rs...
p.getFornecedor().setRazaoSocial(rs.getString("RAZAOSOCIAL"));

Entendeu?

Obrigado pelas dicas!

Eu tenho a classe Fornecedor:

Entao em produto ao invés de:

private int fornecedor;

eu teria:

private Fornecedor fornecedor;

Só mais uma coisa sem querer abusar.

em listaproduto.jsp eu mostro a listagem desta sql com jstl e el como abaixo:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%@page import="aplic.controle.model.dao.CategoriaDao"%>
<jsp:useBean id="produto" scope="session" class= "aplic.controle.model.vo.Produto" />
<jsp:useBean id="fornecedor" scope="session" class= "aplic.controle.model.vo.Fornecedor" />
<jsp:useBean id="categoria" scope="session" class= "aplic.controle.model.vo.Categoria" />
<jsp:useBean id="categoriadao" scope="session" class= "aplic.controle.model.dao.CategoriaDao" />
<jsp:useBean id="listaProduto" scope="request" class="java.util.ArrayList"/> 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link  rel=stylesheet href="paginas.css" type="text/css">
<link  rel=stylesheet href="listagem.css" type="text/css">
<title>Listar Produtos</title>
</head>
<body>
<div id="geral">
<div id="banner"></div>
<div id="menu"><%@ include file="/menu.jsp" %></div>
<div id="conteudocorpo">
<h3 class="htres">Lista de Produtos</h3>
<form name="frmProduto" method="post">
<div id="resultado">
<table class="titulo">
<tr>
 <td class="cel">C&oacute;digo</td>
 <td class="cel">Descri&ccedil;&atilde;o</td>
 <td class="cel">Embalagem</td>
 <td class="cel">C&oacute;digo de Barras</td>
 <td class="cel">Categoria</td>
 <td class="cel">Data Cadastro</td>
 <td class="cel">Unidade</td>
 <td class="cel">Fornecedor</td>
 <td class="cel">Data Exclus&atilde;o</td>
 <td class="cel">Pre&ccedil;o de Compra</td>
 <td class="cel">Pre&ccedil;o de Venda</td>
 <td class="cel">Excluir</td>
</tr>
<c:forEach items="${listaProduto}" var="lista"> 
<tr>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.codProduto}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.descricao}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.embalagem}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.codigoBarra}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.categoria}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.dataCadastro}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.unidade}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarCliente&codProduto=<c:out value="${lista.codProduto}"></c:out>">

// como eu faço aqui para exibir a razaoSocial ?
 <c:out value="${lista.fornecedor}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codCliente=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.dataExclusao}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.precoCompra}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.precoVenda}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=ExcluirProduto&cod=<c:out value="${lista.codProduto}"></c:out>">X</a></td>
</tr>
</c:forEach>
</table>
 </div>
</form>
 </div>
 <div id="rodape">
 <p>Sistema JavaWeB desenvolvido por Walgnei Luiz Cardoso 2011. &copy; Todos os direitos reservados.</p>
 </div>
 </div>
</body>
</html>

Quando eu executo está exibindo algo tipo: Fornecedor@cf710e

Obrigado!

:lol:[RESOLVIDO] Obrigado gente!