Web Service Consulta no banco

13 respostas
I

Olá a todos,

montei um web service utilizando o axis, utilizando o banco de dados mysql, incluir alterar e excluir estão funcionando normalmente, mas o problema é que preciso consultar uns dados e nao sei como pegar esses dados, observem o metodo que criei para consultar:

public List listausu() throws SQLException

{

String sql = “select * from usuario”;

PreparedStatement stmt = this.connection.prepareStatement(sql);

ResultSet rs = stmt.executeQuery();
List<usuarioDTO> list = new ArrayList<usuarioDTO>();
	
	while (rs.next())
	{
		usuarioDTO usuDTO = new usuarioDTO();
		usuDTO.setLogin(rs.getString("st_log_usu"));
		usuDTO.setSenha(rs.getString("st_senha_usu"));
		list.add(usuDTO);
	}
	
	rs.close();
	stmt.close();

	return list;
}

Como poderei montar esse método para que me retorne os dados dessa tabela?

Desde já agradeço a todos.

13 Respostas

S

Aparentemente o seu método está correto. O mesmo preenche um ResultSet com todos os dados da tabela, adiciona na lista e a retorna.
Se você quer pegar todos os dados, cria um objeto do tipo List, no seu Main que receba o retorno desse método e em seguida, itere sobre ele, simples! O seu método, pelo que vi, já está retornando todos os dados em uma lista!

Agora se pretende consultar dados específicos e a tabela no banco consultado, tiver uma chave única para identificação (ID); é só passar a mesma como parâmetro na consulta (possibilidade).
Não sei se foi bem isso que você perguntou, mas se foi, não tem muito segredo.

Flw, boa sorte!

I

Obrigado pela atenção cara,

bom então esse meu método está correto certo ? e se eu precisasse disponibilizar esse método em um webservice para ser consumido por outra tecnologia como .net , seria dessa mesma maneira ?

tô usando para isso tomcat, axis, java

desde ja agradeço.

P

Em webservice vc não pode passar uma Lista, ele trabalha com tipos primitivos.

I

ok cara ,

então como seria um método para web service q retornace os dados de uma tabela ?

tô precisando muito dessa ajuda … veja ae se vc pode me dar uma forcinha …
desde já agradeço…

S

O que o Pedrosa falou, está certo mesmo.
Não tem como passar uma List (apesar da tecnologia .NET, possuir na sua implementação de Coleções, a ICollection, mas seria muito arriscado. Pelo menos, nunca tentei :slight_smile: ).
Algumas vezes, precisei passar informações de .NET pra Java, e vice-versa.
A melhor maneira que encontrei, foi gerar um documento XML, passar como se fosse um POST e carregar o mesmo do outro lado.

Referência:
http://msdn.microsoft.com/en-us/library/ms953968.aspx

Flw!

I

ok pessoal vou passar o cenário completo p v o que vcs acham .

vejam só, tenho um web service feito em java tomcat axis, os métodos de incluir alterar e excluir eu consigo invocar normalmento do .net, mas preciso de um método que retorne os dados do banco, como posso fazer isso nesse meu web service, sabendo - se que o web service em java será consumido pelo .net ?

desde já agradeço…

P

Não é a melhor maneira, mas usei uma vez assim, o método de acesso a dados esta correto, para poder passar uma String usei uma biblioteca que transforma objeto em xml ou seja uma String.
E publicava esse ws com Xfire.

Xtream
http://xstream.codehaus.org/tutorial.html

Mas fica esquesito uma String xml dentro de um ws que é um xml, portanto existem outro tipo de abordagem o ws restfull, o VRaptor tem uma solução bem legal, vale a pena dar uma olhada, onde vc gera uma pagina em JSON ou XML passando uma lista.

Artigo Blog da Caelum
http://blog.caelum.com.br/?s=granularidade

S

Cara, uma solução! Meio tosca eu acho, mas não deixa de ser uma solução! :lol:
Vi que você não gostou muito da idéia do XML :)
Como o Pedrosa falou e como todos nós sabemos, a conversa dos WebServices (ou na maioria das vezes, sempre praticada), com tipos primitivos.
Pegando o seu método e mudando o tipo de retorno:

public String retornaDados() throws SQLException
	 {
	 String sql = "select * from usuario";
	 String dados="";
	 PreparedStatement stmt = this.connection.prepareStatement(sql);
	 ResultSet rs = stmt.executeQuery();

	 while (rs.next())
	 {
	 usuarioDTO usuDTO = new usuarioDTO();
	 usuDTO.setLogin(rs.getString("st_log_usu"));
	 usuDTO.setSenha(rs.getString("st_senha_usu"));
	 dados+=usuDTO.getLogin().toString()+ ", " +usuDTO.getSenha()+"\n";
	 }

	 rs.close();
	 stmt.close();

	 return dados;
}

E do outro lado (na consumação do WebService, em .NET), você recebe os dados e vai formatando com SubString.
Entendeu?
Um pouco trabalhoso devido aos SubStrings, mas dá certo!
Flw!

I

Vlw… pessoal, Agradeço muito mesmo … ajudaram bastante …

vou seguir a orientação de vcs … e colocar como string.

S

inscria:
Vlw… pessoal, Agradeço muito mesmo … ajudaram bastante …

vou seguir a orientação de vcs … e colocar como string.

Lembrando que: “não passa nem perto das melhores práticas, fazer dessa forma” :smiley:
Flw, boa sorte!

P

Simplifique sua vida:

http://blog.caelum.com.br/2006/11/08/ajax-no-vraptor-json-da-maneira-facil/

S

Pedrosa:
Simplifique sua vida:

http://blog.caelum.com.br/2006/11/08/ajax-no-vraptor-json-da-maneira-facil/

Loka essa maneira!
D+ mesmo!

A

Cara depois de quebrar muito a kbeça e desenvolvendo WebServices com JDBC, eu fiz assim:

//Listar todos os objetos do banco de dados
    @WebMethod(operationName = "listaTodosProdutos")
    public List<Produto> listaTodosProdutos() {
        //TODO write your implementation code here:
        //Consultar http://www.guj.com.br/posts/list/113128.java
        ArrayList<Produto> pd = new ArrayList<Produto>();

        try {
            Class.forName("org.postgresql.Driver");

            con = DriverManager.getConnection(URL_BASEDADOS, USUARIO, SENHA);

            stmt = con.createStatement();

            sql = ("SELECT *FROM PRODUTO");

            rs = stmt.executeQuery(sql);

            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);
            }
            stmt.execute(sql);
        } catch (Exception e) {
            e.getMessage();
        }
        return pd;
    }

Embora não seja a melhor forma de se implementar Web Services eu fiz desta maneira.
Outra coisa que algumas pessoas podem encontrar dificuldades é qnto á classe bean.

Tem que fazer os construtores assim:

package org.ws;


import java.io.Serializable;



/**
 * @author AndrePush
 */
public class Produto implements Serializable {

    private static final long serialVersionUID = 1L;
    private int codigo;
    private String descricao;
    private String marca;
    private int quantidade;
    private int valor;
    private int total;

    public Produto() {
    }

    public Produto(int codigo) {
        this.codigo = codigo;
    }

    public Produto(int codigo, String descricao, String marca, int valor, int total) {
        this.codigo = codigo;
        this.descricao = descricao;
        this.marca = marca;
        this.valor = valor;
        this.total=total;
    }

    /**
     * @return the codigo
     */
    public int getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the marca
     */
    public String getMarca() {
        return marca;
    }

    /**
     * @param marca the marca to set
     */
    public void setMarca(String marca) {
        this.marca = marca;
    }


    /**
     * @return the valor
     */
    public int getValor() {
        return valor;
    }

    /**
     * @param valor the valor to set
     */
    public void setValor(int valor) {
        this.valor = valor;
    }

        /**
     * @return the quantidade
     */
    public int getQuantidade() {
        return quantidade;
    }

    /**
     * @param quantidade the quantidade to set
     */
    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    /**
     * @return the total
     */
    public int getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(int total) {
        this.total = total;
    }


    @Override
    public String toString() {
        return "Banco de Dados[codigo= " + codigo + ", descricao=" + descricao + ","
                + "marca=" + marca + ", valor=" + valor +",total=" +total+ "]";
    }
  
}

flw para todos…vivendo e aprendendo!!

Criado 18 de dezembro de 2008
Ultima resposta 3 de dez. de 2010
Respostas 13
Participantes 4