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

22 respostas
viny_scholl

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!:

22 Respostas

romarcio

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

viny_scholl

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!

romarcio

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!

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 { ... }

viny_scholl

Blz romarcio.
Não tinha Pensado Nisso!

Vou testar e já Respondo!!

Valeu pela Ajuda Cara! :smiley:

viny_scholl

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 { ... }

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!

romarcio
Tenta assim
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 {...}

ou

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!!");  
            }
}
viny_scholl

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

Só pode ser o Eclipse Europa 32Bits.

Já estou instalando o Helios!

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

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

viny_scholl

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

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)

viny_scholl

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

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.

viny_scholl

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!!

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.

viny_scholl

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.

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;
	}

}
viny_scholl

ROMARCIO,

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

viny_scholl

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:
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();
	}
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!

romarcio

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]

R

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

viny_scholl

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

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]

R

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

viny_scholl

redr4gon:
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

Putz, então é dificil fazer isso!

Se tu tiver algum material que possa me ajudar eu agradeceria!

Vlw!

R

qndo queria aprender sobre thread peguei ajuda em livros de java… nao posso te ajudar com material nao exceto com o tutorial da propria sun, q ta em ingles

http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html

viny_scholl

redr4gon:
qndo queria aprender sobre thread peguei ajuda em livros de java… nao posso te ajudar com material nao exceto com o tutorial da propria sun, q ta em ingles

http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html

Ok, Muito Obrigado pela Ajuda!

Abraço!

Criado 25 de março de 2011
Ultima resposta 25 de mar. de 2011
Respostas 22
Participantes 3