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?
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.
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 ?
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 ).
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.
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 ?
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.
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.
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:
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;
} [/code]
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!
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+ "]";
}
}