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
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!
[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
e experimente colocar uma JProgressBar ao invés da mensagem que fica melhor ainda