Ajuda com classe Bean

Bom dia…pessoal to precisando de uma ajuda…sou novato nisso…

quero digitar o código do produto num inputText e retornar a descrição e saldo do produto…to fazendo com o jsf+primefaces…e fiz assim…

tenho a classe de conexão com o banco:

[code]package webManager.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class dataBaseUtil {

private static final long serialVersionUID = 1L;

private Connection cx = null;

public dataBaseUtil(){
	
}

public Connection getConnection(){
	if (cx == null){


		try {  
		    // Load the JDBC driver  
		    String driverName = "oracle.jdbc.driver.OracleDriver";  
		    Class.forName(driverName);  
		  
		    // Create a connection to the database  
		    String serverName = "localhost";  
		    String portNumber = "1521";  
		    String sid = "ORA";  
		    String url = "jdbc: oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;  
		    String username = "produtos";  
		    String password = "teste123";  
		    cx = DriverManager.getConnection(url, username, password);  
		} catch (ClassNotFoundException e) {  
		    // Could not find the database driver 
			e.printStackTrace();
		} catch (SQLException e) {  
		    // Could not connect to the database
			e.printStackTrace();
		}  			
		
	}
	
	return cx;
}

public Statement getStatement() throws SQLException, ClassNotFoundException{
	return getConnection().createStatement();
}

public Statement getPreparedStatement(String sql) throws SQLException, ClassNotFoundException{
	return getConnection().prepareStatement(sql);
}

public void closeAll() throws SQLException{
	if (cx != null){
		cx.close();
	}
}

}
[/code]

ai criei a saldoDAO.java

[code]package webManager.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import webManager.db.dataBaseUtil;
import webManager.db.saldoProdutos;

public class saldoDAO extends dataBaseUtil{

public saldoDAO(){
	super();
}

public void populatedSaldo(saldoProdutos sl, ResultSet rs) throws SQLException{
	sl.setCd_produto(rs.getInt("cd_produto"));
	sl.setDs_produto(rs.getString("ds_produto"));
	sl.setCd_empresa(rs.getInt("cd_empresa"));
	sl.setQt_saldo(rs.getInt("qt_saldo"));
}

public saldoProdutos consultaProduto(int cd_produto) throws ClassNotFoundException, SQLException{
	PreparedStatement ps = (PreparedStatement) getPreparedStatement("select cd_produto, ds_produto, qt_saldo from saldo where cd_saldo = 1 and cd_empresa = 999 and cd_produto = ?");
	ps.setInt(1, cd_produto);
	ResultSet rs = ps.executeQuery();
	saldoProdutos toReturn = null;
	while (rs.next()){
		toReturn = new saldoProdutos();
		populatedSaldo(toReturn, rs);
	}
	
	return toReturn;
}

}
[/code]

Essa função consultaProduto será que to fazendo certo ? só quero retornar a descrição e saldo do produto…

essa é minha saldoProdutos.java

[code]package webManager.db;

public class saldoProdutos implements java.io.Serializable {

private static final long serialVersionUID = 1L;
private int cd_produto;
private String ds_produto;
private int cd_empresa;
private int qt_saldo;

public int getCd_produto() {
	return cd_produto;
}
public void setCd_produto(int cd_produto) {
	this.cd_produto = cd_produto;
}
public String getDs_produto() {
	return ds_produto;
}
public void setDs_produto(String ds_produto) {
	this.ds_produto = ds_produto;
}
public int getCd_empresa() {
	return cd_empresa;
}
public void setCd_empresa(int cd_empresa) {
	this.cd_empresa = cd_empresa;
}
public int getQt_saldo() {
	return qt_saldo;
}
public void setQt_saldo(int qt_saldo) {
	this.qt_saldo = qt_saldo;
}

public saldoProdutos(){
	
}

}
[/code]

Ai preciso criar a Bean…para pesquisar atraves do código…isso que não estou sabendo como fazer…alguém pode me ajudar…

[quote=robinhodemorais]Bom dia…pessoal to precisando de uma ajuda…sou novato nisso…
[/quote]
Novato em que? Java ou jsf? Se for em java, esquece, volte pro começo da escada e estude desde os fundamentos, passando por toda a estrutura até chegar em web. Senão, você vai ter muito mais dificuldades que esta.

Por que a classe está com nome minúsculo?

Por que a classe está com nome minúsculo?

função é um elemento da programação estruturada, em java chama-se método.

Por que a classe está com nome minúsculo?

[quote=robinhodemorais]

	private static final long serialVersionUID = 1L;
	private int cd_produto;
	private String ds_produto;
	private int cd_empresa;
	private int qt_saldo;
	
	public int getCd_produto() {
		return cd_produto;
	}
	public void setCd_produto(int cd_produto) {
		this.cd_produto = cd_produto;
	}
	public String getDs_produto() {
		return ds_produto;
	}
	public void setDs_produto(String ds_produto) {
		this.ds_produto = ds_produto;
	}
	public int getCd_empresa() {
		return cd_empresa;
	}
	public void setCd_empresa(int cd_empresa) {
		this.cd_empresa = cd_empresa;
	}
	public int getQt_saldo() {
		return qt_saldo;
	}
	public void setQt_saldo(int qt_saldo) {
		this.qt_saldo = qt_saldo;
	}
	
	public saldoProdutos(){
		
	}

}

Ai preciso criar a Bean…para pesquisar atraves do código…isso que não estou sabendo como fazer…alguém pode me ajudar…[/quote]
Ok e qual tutorial está seguindo? Qual apostila? Qual livro? O que já conseguiu achar de exemplo no google?

Tenho conhecimento básico de Java…estou criando uma aplicação com jsf e primefaces, o jsf estou estudando tem uns 5 meses…estudei pelas videos aulas da devMedia…sobre as classe em minuscula é porque fiz rápido aqui no serviço para passar a minha necessidade, mas já reparei e alterei…

para listar todos os produtos ok, mas para buscar somente 1 produto que ainda não encontrei algo especifico ensinando, por isso vim até o forum…

poderia me ajudar ?

?

[quote][code] public saldoProdutos consultaProduto(int cd_produto) throws ClassNotFoundException, SQLException{
PreparedStatement ps = (PreparedStatement) getPreparedStatement("select cd_produto, ds_produto, qt_saldo from saldo where cd_saldo = 1 and cd_empresa = 999 and cd_produto = ?");
ps.setInt(1, cd_produto);
ResultSet rs = ps.executeQuery();
saldoProdutos toReturn = null;
while (rs.next()){
toReturn = new saldoProdutos();
populatedSaldo(toReturn, rs);
}

    return toReturn;  
}  [/code][/quote]

Não entendi o que você tentou fazer nesse metodo, mas me parece que o erro está aqui.

Você está pegando um ResultSet, que contém o elemento que quer exibir, e depois usa um while(?) com qual objetivo???
Isso não faz sentido, se você só passa um código e espera receber um registro, pq usar um while? Vc só precisa saber se o elemento existe ou não.
Além disso, dentro do while, vc cria um saldoProdutos a cada registro que encontra(deve ser apenas 1).

Para fazer o que você quer, basta recuperar o registro usando o id(cd_produto), converter o valor recuperado para um objeto do tipo do seu Bean(popula) e, através de um outro método , jogar os valores dos atributos desejados no seu inputText.

Outra coisa boa é fazer um método mais genérico para criar objetos através dos registros do banco, faça com que seu método retorne um List<"Seu Bean"> e trabalhe com essa lista, que é muito melhor do que trabalhar com o ResultSet, e, com seu método retornando uma lista de objetos, vc pode reaproveita-lo em várias outras pesquisas mais especificas.

seria assim ?

[code] public void consultaProduto(int cd_produto) throws ClassNotFoundException, SQLException{
PreparedStatement ps = (PreparedStatement) getPreparedStatement(“select cd_produto, ds_produto, cd_empresa, qt_saldo from ulojasnalin.vr_prd_saldo where cd_saldo = 1 and cd_empresa = 999 and cd_produto = ?”);
ps.setInt(1, cd_produto);
ResultSet rs = ps.executeQuery();
SaldoProdutos sl = new SaldoProdutos();

	sl.setCd_empresa(rs.getInt("cd_empresa"));
	sl.setCd_produto(rs.getInt("cd_produto"));
	sl.setDs_produto(rs.getString("ds_produto"));		
	sl.setQt_saldo(rs.getInt("qt_saldo"));
	
}[/code]

Como eu passo no bean ?

Mais ou menos. Você até pode fazer tudo nesse método ai, bastaria, além do que você fez, verificar se a sua consulta retornou algo ou não.

Porém, vc pode passar o ResultSet completo para outro método, que, através dessa entrada, retorna uma lista de objetos contidos no ResultSet.
Ai então, passar essa lista para sua consulta específica sobre saldo e sei lá mais o que, onde bastaria fazer algo do tipo:

saldo = suaLista.get(xx).suaVariavelQueRepresentaOSaldo;
//E assim por diante...

Como eu disse, vc faria uma busca no banco e nunca mais ia precisar realizar acesso novamente, pois ja vai ter uma lista com todos os registros.
Para isso pode criar um atributo List<seuTipo> privado que iria guardar essa lista para cada objeto, sendo atualizado a cada pesquisa que vc faz no banco(raramente mais de uma).

Não entendi, poderia exemplificar para mim ?

Cara, acho que me enrolei um pouco pra explicar.

O que eu quis dizer é:

1º- Faça uma busca geral que não receba parametros e retorne todos os registros da sua tabela em uma List<seuObjeto>.
2º- Faça um método que receba a lista gerada no item anterior e um id de produto. Após ter os dados em mãos, utilize o forEach para achar o registro desejado.
3º(Opcional)- Criar um método que receba seuObjeto e retorne(no inputText ou em uma váriavel) apenas os dados desejados referentes ao objeto passado como parametro.

Deu pra entender?

Se quiser posso tentar escrever algum código, mas tb não sei se é exatamente o que você quer.

1º - Tenho um metodo assim:

public List<SaldoProdutos>selecionaSaldo() throws ClassNotFoundException, ClassNotFoundException, SQLException{ List<SaldoProdutos> toReturn = new LinkedList<SaldoProdutos>(); ResultSet rs = getStatement().executeQuery("select cd_empresa, cd_produto, ds_produto, qt_saldo from ulojasnalin.vr_prd_saldo where cd_saldo = 1 and cd_empresa = 999 and cd_produto = 549623"); while (rs.next()){ SaldoProdutos sld = new SaldoProdutos(); populatedSaldo(sld,rs); toReturn.add(sld); } rs.close(); return toReturn; }

Porém para mim não é interessante trazer tudo, pois nessa tabela tenho mais de 500.000 itens…

me ajuda a construir a 3º Opção, pois realmente não estou sabendo como fazer…

Tudo que encontrei por enquanto foi retornar uma lista, não achei ainda algo que posso consultar direto pelo um ID.

[quote=robinhodemorais]1º - Tenho um metodo assim:

public List<SaldoProdutos>selecionaSaldo() throws ClassNotFoundException, ClassNotFoundException, SQLException{ List<SaldoProdutos> toReturn = new LinkedList<SaldoProdutos>(); ResultSet rs = getStatement().executeQuery("select cd_empresa, cd_produto, ds_produto, qt_saldo from ulojasnalin.vr_prd_saldo where cd_saldo = 1 and cd_empresa = 999 and cd_produto = 549623"); while (rs.next()){ SaldoProdutos sld = new SaldoProdutos(); populatedSaldo(sld,rs); toReturn.add(sld); } rs.close(); return toReturn; }

Porém para mim não é interessante trazer tudo, pois nessa tabela tenho mais de 500.000 itens…

me ajuda a construir a 3º Opção, pois realmente não estou sabendo como fazer…

Tudo que encontrei por enquanto foi retornar uma lista, não achei ainda algo que posso consultar direto pelo um ID.[/quote]

Bom, exatamente pelo tamanho, buscar tudo apenas uma vez poderia te ajudar.

Mas vamos tentar.
Seu ResultSet vai ter apenas o item que você quer, vc quer retornar 2 campos desse ResultSet. Não sei, pq vc não faz isso?
Ao invés de ter o trabalho de montar um novo objeto, recupera os valores que você quer jogando eles direto nas textBox.
Se vc quer um método bem específico, basta fazer isso. Mas vc vai ficar preso a isso, se precisar de outra coisa vai ter que fazer outro método…

eu quero retornar as seguintes informações no result set de apenas um produto passado por parametro:

Então cara, ao invés disso

   public void populatedSaldo(saldoProdutos sl, ResultSet rs) throws SQLException{  
        sl.setCd_produto(rs.getInt("cd_produto"));  
        sl.setDs_produto(rs.getString("ds_produto"));  
        sl.setCd_empresa(rs.getInt("cd_empresa"));  
        sl.setQt_saldo(rs.getInt("qt_saldo"));  
    }  

Vc faria algo do tipo

              txtBox1.setText(rs.getInt("cd_produto"));
              txtBox2.setText(rs.getString("ds_produto")); 
              txtBox3.setText(rs.getInt("cd_empresa"));
              txtBox4.setText(rs.getInt("qt_saldo"));  

Não sei se a sintaxe é essa, mas acho que deu pra entender

mas dai eu tinha que jogar no meu Bean… esse metodo ai está na SaldoDAO.java

?