[RESOLVIDO] - Ajuda - Validar Codigo Junto ao Banco de dados - Java Desktop - Urgente

Olá, Estou desenvolvendo uma Aplicação frente de Caixa, e eu Ensiro o Codigo do produto para que chame o Preço e a Descrição, até ai tudo Ok.

Porem, se eu digitar um codigo de produto que não estiver cadastrado, assim que perdesse o foco eu gostaria de retornar uma Mensagem, ("[color=red]Produto Não cadastrado![/color]"), Mas estou tendo Problemas com essa Implementação!

Eu estou desenvolvendo ela no tfCodigoFocusLost que é o Campo aonde Insiro o Codigo. Mas não to Conseguindo!

Segue Abaixo o que eu Desenvolvi até Agora:

private void tfCodigoFocusLost(FocusEvent evt){ System.out.println("Entrou em tfCodigoFocusLost");

       try {
		jTextField2.requestFocus();

		ProdutoBean produto = produtoDAO.retornaProdutoPeloCodigo(tfCodigo.getText()); 
			if (produto != null) {				
				produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText());
				jTextField2.setText(produtobean.getDescricao());
				jTextField4.setText(String.valueOf(produtobean.getValorVenda()));			
			} 
	} catch (Exception e) {
		JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!");
	}

Chamando a Conexão no Banco: retornaProdutoPeloCodigo
public ProdutoBean retornaProdutoPeloCodigo(String codigo) { produtoBean = new ProdutoBean(); produtoBean = produtoDAO.listarProdutosPeloCodigo(codigo); return produtoBean; }
Sendo que a Conexão no Banco que Retorna o Codigo do Produto para Pesquisa é listarProdutosPeloCodigo


	public ProdutoBean listarProdutosPeloCodigo(String codigo) {
		ProdutoBean prod = new ProdutoBean();
		try {
			pstm = bd.conectar().prepareStatement(SELECT * FROM PRODUTO WHERE CODIGO=?);
			pstm.setString(1, codigo);
			rs = pstm.executeQuery();
			rs.first();
			prod.setCodigo(rs.getString("codigo"));
			prod.setAuditoria(rs.getString("auditoria"));
			prod.setCodigoFornecedor(rs.getInt("fornecedor_codigo"));
			prod.setCodigoUnidade(rs.getInt("unidade_codigo"));
			prod.setEstoque(rs.getInt("estoque"));
			prod.setDescricao(rs.getString("descricao"));
			prod.setEstoqueCritico(rs.getInt("critico"));
			prod.setValorCompra(rs.getDouble("vlrcompra"));
			prod.setValorVenda(rs.getDouble("vlrvenda"));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			bd.desconectar();
		}
		return prod;
	}

Por Favor Galera, Me ajuda aew!

Tenho que entregar esse Trabalho Dia 30/03 e Ainda nem fiz Implementei o Estoque!!

Desde Já Agradeço a Ajuda.
Esse forum já me Salvou Varias Vezes! haha
:smiley:

Essa é a Frente de Caixa que estou desenvolvendo!:

Cria um try/catch. Se retornar null na pesquisa, cai no catch, dai lá você coloca um JOPaine dizendo que produto não existe.

Não sei se é por que estou usando o Eclipse Europa, mas aqio o try/catch não funfa!

Da exception Igual!

Ate vou Rodar no Eclipse Helios pra ver se Muda!

Mesmo Assim, Vlw!

Não sei se é por que estou usando o Eclipse Europa, mas aqio o try/catch não funfa!

Da exception Igual!

Ate vou Rodar no Eclipse Helios pra ver se Muda!

Mesmo Assim, Vlw![/quote]

Sim, vai dar exception por que sua pesquisa retorna null.
Para não parar o processo, coloca um finally depois do bloco catch.

try { ... } catch(Exception ex) { ... } finally { ... }

Blz romarcio.
Não tinha Pensado Nisso!

Vou testar e já Respondo!!

Valeu pela Ajuda Cara! :smiley:

[quote=romarcio]Sim, vai dar exception por que sua pesquisa retorna null.
Para não parar o processo, coloca um finally depois do bloco catch.

try { ... } catch(Exception ex) { ... } finally { ... }[/quote]

Usando o Eclipse europa ele não Mandou Exception ao passar pelo Catch, somente seu colocar o Aviso em Finally.
Por que será?

Ele Passou reto pelo Catch.
Coloquei um Syso (“Catch”) e não respondeu!

Que loco!

Tenta assim

[code]private void tfCodigoFocusLost(FocusEvent evt){ System.out.println(“Entrou em tfCodigoFocusLost”);

   try {  
    jTextField2.requestFocus();  

    ProdutoBean produto = produtoDAO.retornaProdutoPeloCodigo(tfCodigo.getText());   
        //if (produto != null) {                
            produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText());  
            jTextField2.setText(produtobean.getDescricao());  
            jTextField4.setText(String.valueOf(produtobean.getValorVenda()));             
        //}   
} catch (Exception e) {  
    JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!");  
} finally {...} [/code] 

ou

[code]private void tfCodigoFocusLost(FocusEvent evt){
System.out.println(“Entrou em tfCodigoFocusLost”);

    jTextField2.requestFocus();  

    ProdutoBean produto = produtoDAO.retornaProdutoPeloCodigo(tfCodigo.getText());   
        if (produto != null) {                
            produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText());  
            jTextField2.setText(produtobean.getDescricao());  
            jTextField4.setText(String.valueOf(produtobean.getValorVenda()));             
        }  else {
            JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!");  
        }

} [/code]

Pois é romarcio .
Nem Assim Funciona, da exception Igual!

Só pode ser o Eclipse Europa 32Bits.

Já estou instalando o Helios!

produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText());

produtobean é uma variável de referência?
Por que vc não declarou uma local no método.

[quote=romarcio]produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText());
produtobean é uma variável de referência?
Por que vc não declarou uma local no método.[/quote]

O seguinte Erro é Apresentado!

Entrou em tfCodigoFocusLost java.sql.SQLException: Illegal operation on empty result set. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815) at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488) at br.com.ecftef.model.ProdutoDAO.listarProdutosPeloCodigo(ProdutoDAO.java:57) at br.com.ecftef.control.Controle.retornaProdutoPeloCodigo(Controle.java:40) at br.com.ecftef.ViewECFTEF.tfCodigoFocusLost(ViewECFTEF.java:1629) at br.com.ecftef.ViewECFTEF.access$6(ViewECFTEF.java:1593) at br.com.ecftef.ViewECFTEF$4.focusLost(ViewECFTEF.java:365) at java.awt.AWTEventMulticaster.focusLost(Unknown Source) at java.awt.Component.processFocusEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at br.com.ecftef.ViewECFTEF$2.dispatchEvent(ViewECFTEF.java:198) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

[quote=romarcio]produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText());
produtobean é uma variável de referência?
Por que vc não declarou uma local no método.[/quote]

Não entendi a sua Colocação.
Estou iniciando em Java, portanto tenho Muito a Aprender ainda!

Ela e uma Variavel de ProdutoBean:
private ProdutoBean produtobean;

Aonde ProdutoBean estão declarados os meus Get’s e Set’s.

Estou tentando Assim e Igualmente gera Exception e Não gera a mensagem do JoptioPane!

try { if (!tfCodigo.getText().equals("")) { produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText()); jTextField2.setText(produtobean.getDescricao()); jTextField4.setText(String.valueOf(produtobean.getValorVenda())); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!"); System.out.println("Entrou em Catch"); } finally { if (jTextField4.getText() == null) { JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!"); System.out.println("Não cadastrado!"); } }

Já Coloquei TRY/CATCH No Chamado do Evendo e Tambem Não Funciona!

Sempre da o Seguinte Erro
java.sql.SQLException: Illegal operation on empty result set. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815) at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488) at br.com.ecftef.model.ProdutoDAO.listarProdutosPeloCodigo(ProdutoDAO.java:57) at br.com.ecftef.control.Controle.retornaProdutoPeloCodigo(Controle.java:40) at br.com.ecftef.ViewECFTEF.tfCodigoFocusLost(ViewECFTEF.java:1628)

Alguém da uma Luz Aki!!

	try {
		if (!tfCodigo.getText().equals("")) {					
				produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText());
				jTextField2.setText(produtobean.getDescricao());
				jTextField4.setText(String.valueOf(produtobean.getValorVenda()));			
		}
	} catch (SQLException s) {
		JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!");
		System.out.println("Entrou em Catch"); 
	} catch (Exception e) {
		JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!");
		System.out.println("Entrou em Catch");
	} finally {		
		if (jTextField4.getText() == null) {
			JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!");
			System.out.println("Não cadastrado!");
		} 
	}

Parece que o problema está ocorrendo em ProdutoDAO, na linha 57.
Talvez você tenha um try/catch lá, esse try/catch é que está lançando a exceção.

[quote=romarcio] try { if (!tfCodigo.getText().equals("")) { produtobean = controle.retornaProdutoPeloCodigo(tfCodigo.getText()); jTextField2.setText(produtobean.getDescricao()); jTextField4.setText(String.valueOf(produtobean.getValorVenda())); } } catch (SQLException s) { JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!"); System.out.println("Entrou em Catch"); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!"); System.out.println("Entrou em Catch"); } finally { if (jTextField4.getText() == null) { JOptionPane.showMessageDialog(null, "Produto Não Cadastrado!!"); System.out.println("Não cadastrado!"); } }

Parece que o problema está ocorrendo em ProdutoDAO, na linha 57.
Talvez você tenha um try/catch lá, esse try/catch é que está lançando a exceção.[/quote]

Pior que não tinha Percebido, Valeu aew.

Tem os try/catch da Persistência!

Mas Visualmente não Achei Nenhum Erro, de uma Olhada!


package br.com.ecftef.model;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.ecftef.bd.AcessoMySQL;

public class ProdutoDAO {

    PreparedStatement pstm;
    ResultSet rs;
    String consultaProduto = "SELECT * FROM PRODUTO WHERE DESCRICAO LIKE ?";
    String consultaProdutoCodigo = "SELECT * FROM PRODUTO WHERE CODIGO=?";
    String searchByCod = "SELECT * FROM PRODUTO WHERE CODIGO=?";

    
    
	AcessoMySQL bd = new AcessoMySQL();	
	
    public List<ProdutoBean> listarProdutos(String descricao){
        List<ProdutoBean> produtos = new ArrayList<ProdutoBean>();
        try{
            pstm = bd.conectar().prepareStatement(consultaProduto);
            pstm.setString(1, descricao);//SELECT * FROM PRODUTO WHERE DESCRICAO LIKE caneta
            rs = pstm.executeQuery();
            ProdutoBean prod;
            while (rs.next()){
                prod = new ProdutoBean();
                prod.setCodigo(rs.getString("codigo"));
                prod.setAuditoria(rs.getString("auditoria"));
                prod.setCodigoFornecedor(rs.getInt("fornecedor_codigo"));
                prod.setCodigoUnidade(rs.getInt("unidade_codigo"));
                prod.setEstoque(rs.getInt("estoque"));
                prod.setDescricao(rs.getString("descricao"));
                prod.setEstoqueCritico(rs.getInt("critico"));
                prod.setValorCompra(rs.getDouble("vlrcompra"));
                prod.setValorVenda(rs.getDouble("vlrvenda"));
                produtos.add(prod);
            }
            bd.desconectar();
        } catch(Exception e){
            e.printStackTrace();
        }
        return produtos;
    }
	
	public ProdutoBean listarProdutosPeloCodigo(String codigo) {
		ProdutoBean prod = new ProdutoBean();
		try {
			pstm = bd.conectar().prepareStatement(consultaProdutoCodigo);
			pstm.setString(1, codigo);
			rs = pstm.executeQuery();
			rs.first();
			prod.setCodigo(rs.getString("codigo"));
			prod.setAuditoria(rs.getString("auditoria"));
			prod.setCodigoFornecedor(rs.getInt("fornecedor_codigo"));
			prod.setCodigoUnidade(rs.getInt("unidade_codigo"));
			prod.setEstoque(rs.getInt("estoque"));
			prod.setDescricao(rs.getString("descricao"));
			prod.setEstoqueCritico(rs.getInt("critico"));
			prod.setValorCompra(rs.getDouble("vlrcompra"));
			prod.setValorVenda(rs.getDouble("vlrvenda"));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			bd.desconectar();
		}
		return prod;
	}
	
	public ProdutoBean searchByCod(String codigo) throws SQLException {
		pstm = bd.conectar().prepareStatement(searchByCod);
		pstm.setString(1, codigo);
		rs = pstm.executeQuery();
		ProdutoBean prod = null;
		while (rs.next()) {
			prod.setCodigo(rs.getString("codigo"));
			prod.setAuditoria(rs.getString("auditoria"));
			prod.setCodigoFornecedor(rs.getInt("fornecedor_codigo"));
			prod.setCodigoUnidade(rs.getInt("unidade_codigo"));
			prod.setEstoque(rs.getInt("estoque"));
			prod.setDescricao(rs.getString("descricao"));
			prod.setEstoqueCritico(rs.getInt("critico"));
			prod.setValorCompra(rs.getDouble("vlrcompra"));
			prod.setValorVenda(rs.getDouble("vlrvenda"));
			break;
		}
		rs.close();
		pstm.close();
		bd.desconectar();
		return prod;
	}

}

ROMARCIO,

CODIGO no Banco é Varchar, esta declarado String, mas ta Certo né??

Valeu Romarcio!

Graças a tua Ajuda Consegui Resolver meu problema!

Valeu Mesmo Cara, o problema éra na conexao com o Banco.

Agora tá Perfeito!

Ficou Assim:

[code] try {
if (!tfCodigo.getText().equals("")) {
produtobean = controle.searchProductsByCod(tfCodigo.getText());
jTextField2.setText(produtobean.getDescricao());
jTextField4.setText(String.valueOf(produtobean.getValorVenda()));
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, “Produto Não Cadastrado!!”);
System.out.println(“Entrou em Catch”);
} finally {
if (jTextField4.getText() == null) {
JOptionPane.showMessageDialog(null, “Produto Não Cadastrado!!”);
System.out.println(“Não cadastrado!”);
}

	jTextField2.requestFocus();
}[/code]

E no Banco Assim:

public ProdutoBean searchByCod(String codigo) throws SQLException { ProdutoBean prod = null; pstm = bd.conectar().prepareStatement(searchByCod); pstm.setString(1, codigo); rs = pstm.executeQuery(); while (rs.next()) { prod = new ProdutoBean(); prod.setCodigo(rs.getString("codigo")); prod.setAuditoria(rs.getString("auditoria")); prod.setCodigoFornecedor(rs.getInt("fornecedor_codigo")); prod.setCodigoUnidade(rs.getInt("unidade_codigo")); prod.setEstoque(rs.getInt("estoque")); prod.setDescricao(rs.getString("descricao")); prod.setEstoqueCritico(rs.getInt("critico")); prod.setValorCompra(rs.getDouble("vlrcompra")); prod.setValorVenda(rs.getDouble("vlrvenda")); break; } rs.close(); pstm.close(); bd.desconectar(); return prod; }

Valeu Mesmo!

GUJ - Sempre Ajudando!

Podem Fechar o Topico!

Legal…

Para fechar o tópico você precisa colocar ele como resolvido, para isso, clica no botão editar no seu 1° post no tópico. Dai vai no campo titulo e ao lado do titulo escreva: [RESOLVIDO]

uma dica… nao usa o FocusLost pra colocar suas validações… usa o InputVerifier que ele foi feito pra isso

[quote=redr4gon]uma dica… nao usa o FocusLost pra colocar suas validações… usa o InputVerifier que ele foi feito pra isso

[/quote]

Ok Cara, Vou pesquisar ele, nem sabia que ele Existia hehe!!
.
[size=18]Mais uma Coisa, Alguem ai sabe como Colocar uma Mensagem enquanto o programa esta Executando??

Exemplo:
(Aguarde…) enquanto um processo demorado é executado[/size]

tem q criar um novo thread com essa mensagem e deixar ela exibindo enquanto o outro processo nao acaba… dae qndo acabar la vc some com ela

estude thread :wink:

e experimente colocar uma JProgressBar ao invés da mensagem que fica melhor ainda