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();
}
%>
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.
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!
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 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: