E.getMessage retornando nulo, não entendi pq!

sei que o titulo ta uma porcaria, + não faço ideia de onde esta o
erro.

bom é o seguinte to aprendendo java to nas primeiras aulas de jsp
ainda

criei um metodo para listar os produtos e o nome da loja que o tem
com um join, porem o “e.getMessage” ta retornando nulo não entendi o
pq, pois eu copiei o sql e colei no mysql e deu o resultado certinho

vejam o resultado do sql:


id 	nome 	              preco 	    quant 	loja 	                idloja
1      luminaria de note      111 	    191 	informatica 	1
2      Mestres do Destino    12.9 	    100 	livrarias 	        3
3 	notebook vostro        2229 	    999 	informatica 	1
4 	asasfdas 	               1.99 	    1111 	eletronicos 	2
5 	a morte e a mo         15.9 	    1500 	livrarias 	        3

olhem o metodo

public List<Produto> listarProduto() throws Exception{
        List<Produto> lista = new ArrayList<Produto>();
        stmt = con.prepareStatement("SELECT prod.idProd AS identificador, prod.nome, prod.preco, prod.quantidade, loja.nome AS loja, loja.idloja " +
                " FROM produto AS prod INNER JOIN loja ON loja.idLoja = prod.idloja");
        rs = stmt.executeQuery();
        
        while(rs.next()){
           Produto produto = new Produto();
           produto.setIdProduto(rs.getInt("idProd"));
           produto.setNome(rs.getString("nome"));
           produto.setPreco(rs.getDouble("valor"));
           produto.setQuantidade(rs.getInt("quantidade"));

           Loja loja = new Loja();
           loja.setIdLoja(rs.getInt("idLoja"));
           loja.setNome(rs.getString("nome"));

           produto.setLoja(loja);

           lista.add(produto);
        }
        return lista;

    }

olhem o jsp:

<%
    LojaDao lojaDao = new LojaDao();
    Integer i = 0;
    try{
        lojaDao.abrirCon();
        request.setAttribute("listaLoja", lojaDao.listar());
        ProdutoDao produtoDao = new ProdutoDao();

//isso foi apenas para um teste
        List<Produto> teste = new ArrayList<Produto>();
        teste = produtoDao.listarProduto();
        i = teste.size();
//fim do teste - vou apagar dps        

        request.setAttribute("listaProd", produtoDao.listarProduto());

    }catch(Exception e){
        out.print(e.getStackTrace() + " error ");
    }finally{
        lojaDao.fecharCon();
    }
%>
<c:forEach items="${listaProd}" var="prod">
       <tr>
           <td><input type="checkbox" name="id" value="${prod.idProd}"></td>
           <td>${prod.nome}</td>
           <td>${prod.preco}</td>
           <td>${prod.quantidade}</td>
           <td>${prod.loja}</td>
           <td><a href="ManterProduto?1&cmd=alt">alterar</a></td>
      </tr>
</c:forEach>

alguem pode me ajudar me dando dica de onde possa estar ou me dizer o
que esta causando esse problema, nunca vi esse erro só quando o sql ta
errado + não foi o caso…

pow cara, olha lá, o teu idProd que tu ta pedindo, tu identificou ele no comando sql como identificador.

stmt = con.prepareStatement("SELECT prod.idProd AS identificador, 
                + " prod.nome as nome, prod.preco as preco, prod.quantidade as quantidade, loja.nome AS loja, loja.idloja as idLoja  " +
                " FROM produto AS prod INNER JOIN loja ON loja.idLoja = prod.idloja");
        //aqui pode estar o erro, você não tá recuperando o nome real do item 
        rs = stmt.executeQuery();
        
        while(rs.next()){
           Produto produto = new Produto();
           produto.setIdProduto(rs.getInt("idProd"));
           produto.setNome(rs.getString("nome"));
           produto.setPreco(rs.getDouble("valor"));
           produto.setQuantidade(rs.getInt("quantidade"));

           Loja loja = new Loja();
           loja.setIdLoja(rs.getInt("idLoja"));
           loja.setNome(rs.getString("nome"));

           produto.setLoja(loja);

           lista.add(produto);
        }

chame os bois pelo nome certo, depois de dar pra eles o nome.
veja se esse é o erro.

Tenta assim:

public List<Produto> listarProduto() throws Exception{
        List<Produto> lista = new ArrayList<Produto>();
        stmt = con.prepareStatement("SELECT prod.idProd AS identificador, prod.nome, prod.preco, prod.quantidade, loja.nome AS loja, loja.idloja " +
                " FROM produto AS prod INNER JOIN loja ON loja.idLoja = prod.idloja");
        rs = stmt.executeQuery();
        
        while(rs.next()){
           Produto produto = new Produto();
           produto.setIdProduto(rs.getInt("identificador")); //nome que esta definido la no sql
           produto.setNome(rs.getString("nome"));
           produto.setPreco(rs.getDouble("preco")); //nome que esta definido la no sql
           produto.setQuantidade(rs.getInt("quantidade"));

           Loja loja = new Loja();
           loja.setIdLoja(rs.getInt("idLoja"));
           loja.setNome(rs.getString("loja")); 

           produto.setLoja(loja);

           lista.add(produto);
        }
        return lista;

    }

Acho que estaa confundindo algumas coisas, verifica ai qualquer coisa retorna!

Wolmir Garbin

po cara, vlw pela dica, eu realmente cometi esse erro.

bom agora para não ocorrer + eu dei um nome para cada campo que eu chamo, mas o erro continua

erro com e.getStackTrace(): [Ljava.lang.StackTraceElement;@ce015f

erro com e.getMessage(): null

codigo apos as mudanças:

 public List<Produto> listarProduto() throws Exception{
        List<Produto> lista = new ArrayList<Produto>();
        stmt = con.prepareStatement("SELECT prod.idProd AS identificador, prod.nome as nome, prod.preco as valor, prod.quantidade as quantidade, "+
                " loja.nome AS loja, loja.idloja as idLoja " +
                " FROM produto AS prod INNER JOIN loja ON loja.idLoja = prod.idloja");
        rs = stmt.executeQuery();
        
        while(rs.next()){
           Produto produto = new Produto();
           produto.setIdProduto(rs.getInt("identificador"));
           produto.setNome(rs.getString("nome"));
           produto.setPreco(rs.getDouble("valor"));
           produto.setQuantidade(rs.getInt("quantidade"));

           Loja loja = new Loja();
           loja.setIdLoja(rs.getInt("idLoja"));
           loja.setNome(rs.getString("loja"));

           produto.setLoja(loja);

           lista.add(produto);
        }
        return lista;

    }

o null ta aparecendo quando você chama o que?

public List<Produto> listarProduto() throws Exception{  
       List<Produto> lista = new ArrayList<Produto>();  
       stmt = con.prepareStatement("SELECT prod.idProd AS identificador, prod.nome as nome, prod.preco as valor, prod.quantidade as quantidade, "+  
               " loja.nome AS loja, loja.idloja as idLoja " +  
               " FROM produto AS prod INNER JOIN loja ON loja.idLoja = prod.idloja");  
       rs = stmt.executeQuery();  
         
       while(rs.next()){  
          Produto produto = new Produto();  
          produto.setIdProduto(rs.getInt("identificador"));  
          produto.setNome(rs.getString("nome"));  
          produto.setPreco(rs.getDouble("valor"));  
          produto.setQuantidade(rs.getInt("quantidade"));  
  
          Loja loja = new Loja();  
          loja.setIdLoja(rs.getInt("idLoja"));  
          loja.setNome(rs.getString("loja"));  
  
          produto.setLoja(loja);  
  
          lista.add(produto);  
       }  
       return lista;  
  
   }  

você retorna a lista de produtos, mas a loja você não aloca em lugar nenhum. Você criou 2 objetos diferentes: um do tipo Loja e outro do tipo Produto, mas no seu ArrayList você coloca somente o teu objeto do tipo produto, e não loja, se você tentar chamar algum atributo do seu objeto loja com a referência do ArrayList você vai receber null mesmo, porque os objetos não tem relação ali.

o null ta aparecendo quando eu chamo o produtoDao.listarProduto()

o arrayList eu usei apenas para fazer um teste e vou apaga-lo + tarde, e a loja eu estou usando veja:

LojaDao lojaDao = new LojaDao();
    Integer i = 0;
    try{
        lojaDao.abrirCon();
//usando o loja.listar() dao
        request.setAttribute("listaLoja", lojaDao.listar());
//usando o loja.listar() dao
        ProdutoDao produtoDao = new ProdutoDao();

        List<Produto> teste = new ArrayList<Produto>();
        teste = produtoDao.listarProduto();


        i = teste.size();
        
        request.setAttribute("listaProd", produtoDao.listarProduto());
        

        
        
    }catch(Exception e){
        out.print(e.getMessage() + " error ");
    }finally{
        lojaDao.fecharCon();
    }

e a parte queesta funcionando, onde eu listo as lojas:

<c:forEach items="${listaLoja}" var="loja">
	<option value="${loja.idLoja}">${loja.nome}</option>
</c:forEach>

eu só não tinha postado essa ultima parte parte pois esta funcionando