Web Service - Como fazer um select no banco de dados para mostrar uma coleção de objetos?  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
AndrePush
Thread.start()

Membro desde: 02/03/2010 20:49:43
Mensagens: 32
Localização: Cuiabá/MT
Offline

Olá pessoal do GUJ,

Estou há tempos tentando encontrar a solução para este tópico que iniciei agora, como fazer um select no banco de dados para mostrar uma coleção ou array.
Já procurei em todo o GUJ, mas não encontro a solução para este meu problema.

Para fim de teste fiz um WebService que faz CRUD. Com ele eu consigo fazer o INSERT para p/ o Banco de Dados, mas os SELECTs não funcionam. Por exemplo o meu método q eu qro mostra tudo o que tem no banco de dados getListaTodosProdutos(); ->deêm uma olhada neste método por favor.
Abaixo está o exemplo:
Esta é a minha classe Produto.


Logo abaixo minha classe que implementa o SEI ou interface e nesta eu tbm coloquei a comunicação com o banco de dados.

Como eu já disse eu consigo fazer o INSERT mas no SELECT não funciona quanto eu quero mostrar todos os produtos que estão no banco de dados.A aplicação parece que entra em um loop eterno ou não consegue achar o banco de dados, dai eu tenho que abortar a pesquisa no BD.
Por favor preciso de ajuda, tenho que entregar este projeto no serviço.

aguardo respostas.

Kenobi
GUJ Master
[Avatar]

Membro desde: 14/11/2003 13:06:37
Mensagens: 1678
Localização: Brasil
Offline

Olá Amigo, antes de tentar expor uma funcionalidade como serviço, que tal prestar atenção no design da sua aplicação ? Primeiro você colocou chamada à base de dados diretamente no "controller" e isso é um anti-pattern. Dê uma olhadinha no Pattern DAO. Não vou citar no momento Repository do Eric Evans, pois pode ser muito complexo para você entender nesse estágio.

Procure uma literatura sobre padrões de desenvolvimento, pois seu design está bastante problemático, e procure usar JPA ao invés de JDBC direto. Isso dói os olhos de ver

Com relação ao WebService, para você melhorar isso, dê uma espiada nas annotations do JAXB, que irão fazer de forma correta o parse de XML para POJOs.


[]'s

Felipe

This message was edited 3 times. Last update was at 28/11/2010 12:21:05


----------------------------------------------------------
SOA|EXPERT - http://www.soaexpert.com.br
SOA de um jeito simples e eficiente.
[WWW] [MSN] [ICQ]
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Você notou que seu método getListaProdutoGeral(); tem, como retorno, uma chamada a ele próprio?? Em outras palavras, você notou que seu método sempre fica chamando a ele próprio, ao invés de retornar a lista, propriamente dita??

[]´s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

AndrePush
Thread.start()

Membro desde: 02/03/2010 20:49:43
Mensagens: 32
Localização: Cuiabá/MT
Offline

Kenobi obrigado pela atenção. Bom, eu conheço o Pattern DAO, mas na correria com o projeto eu fiz tudo no controler mesmo.
Qnto ao JPA, JAXB vou dar uma olhada. Estou reformulando o código quanto funcionar certinho eu posto ak novamente.


asaudate verdade, caraca meu!nubb...

vou refazer essa lista!

vlws...
AndrePush
Thread.start()

Membro desde: 02/03/2010 20:49:43
Mensagens: 32
Localização: Cuiabá/MT
Offline

Kenobi e asaudate eu não fiz grandes adaptações no código mas consegui retornar tudo do banco.
Assim eu tenho o metodo getListaProdutoGeral(), nele eu não estava carregando a lista segundo asaudate. Contudo ficou assim:

public List<Produto>compraProduto(@WebParam(name = "descricao")
String descricao){

ArrayList<Produto>pd=new ArrayList<Produto>(); //carrego a lista

try {
...carrega driver...
....conecta no banco...


stmt = con.createStatement();

sql = ("SELECT quantidade,valor FROM PRODUTO WHERE"
+ " descricao= " + produto+ "')");

rs = stmt.executeQuery(sql);
// Se existe o produto compra-lo
while (rs.next()) {
Produto prod = new Produto();
prod.setCodigo(rs.getInt("codigo"));
prod.setDescricao(rs.getString("descricao"));
prod.setMarca(rs.getString("marca"));
prod.setQuantidade(rs.getInt("quantidade"));
prod.setValor(rs.getInt("valor"));
pd.add(prod); //adiciono o obj nela
}
stmt.execute(sql);
return pd; //simples eu q estava batendo kbeça!!

agora pessoal como que eu faço para retornar apenas uma linha do banco?
Por exemplo: SELECT quantidade, valor FROM Produto WHERE Produto;
Eu já fiz isso com o mesmo código de listar todos os produtos só que retorna vazio, alguém pode me explicar como que eu faço?
Obs.: Fiz uma só tabela para explicar.

vlws...
aguardo respostas.

Hebertbc
JavaChild
[Avatar]

Membro desde: 07/11/2008 20:27:15
Mensagens: 113
Localização: Campo Grande / MS
Offline

do mesmo jeito que vc retorna uma lista com varios itens... retorne uma lista com apenas 1 objeto

Como foi dito antes... pq não dar uma melhorada no codigo, recomendo usar o Hibernate, implemente um DAO... vai facilitar sua vida uns 150%.

This message was edited 2 times. Last update was at 29/11/2010 15:58:45


C'est la vie monsieur excentrique...
AndrePush
Thread.start()

Membro desde: 02/03/2010 20:49:43
Mensagens: 32
Localização: Cuiabá/MT
Offline

Ok, eu consegui ak, tranquilo agora.
Sim cara, assim que eu apresentar o projeto e o gerente de projetos gostar eu implemento PADRÕES.
Eu fiz assim:


Agora só falta somar estas colunas e termino.
auguma opnião pessoal ?

Qnto eu conseguir somar as colunas volto ak para fecharem este fórum.

vlw pessoal.
AndrePush
Thread.start()

Membro desde: 02/03/2010 20:49:43
Mensagens: 32
Localização: Cuiabá/MT
Offline

Olá pessoal, avancei no projeto já implentei o padrão DAO no projeto, agora está um pouco mais "bonitinho".
Estou com o seguinte problema estou implementando um sistema de compra com Web Services (SOAP-implementação JAX-WS).
Fiz 3 tabelas (PRODUTO,ESTOQUE,COMPRA) no banco de dados POSTGRE utilizando JDBC só para testar.
Mas me deparei com um problema de calcular o valor total da compra pois tenho o seguinte model.

Class ProdutoM:codigo,descricao,valor,marca
Class EstoqueM:codigo,quantidade
Class CompraM:codigo,total

Eu preciso através do select SQL guardar no total a multiplicação de valor pela quantidade, como é possível?
Outra coisa o cliente tem acesso só ás variáveis do parâmetro do método?
Sabemos que no WS temos interfaces de acesso para o desacoplamento e práticas da POO. Com gostaria que vc's dessem essa força para mim.

vlws...
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team