Pesquisa com JTextField vazio

SQL Server

Java

Automação Comercial

07/05/2015

Boa noite pessoal, tenho uma tela em JAVA e o professor me mandou implementar uma tela de pesquisa, onde o usuário pode digitar o código e o sistema tem que trazer todas as informações daquele produtos. Até ai tudo bem, o problema e que o usuário pode não digitar o codigo, ele pode digitar a descrição e deixar o código do produto em branco.

Como devo tratar minha view nessa situação?

Pensei em mandar todos os campos para a persistência, porém não aceita campo em branco. Como posso fazer?

Fiz o código abaixo, porém quando o usuário deixa qualquer campo em branco, da erro na parte do comando que está em branco, como por exemplo p.setAplicacao(txtAplicacao.getText());

p.setIdProdutos(Integer.valueOf(txtCodigoProduto.getText()));
				p.setCodigoBarras(Long.valueOf(txtCodigoBarras.getText()));
				p.setAplicacao(txtAplicacao.getText());
				p.setDescricao(txtDescricao.getText());
				p.setMedida(txtMedida.getText());
				p.setValorVenda(Double.valueOf(fmtValorVenda.getText()));
				p.setValorCusto(Double.valueOf(fmtValorCusto.getText()));
				p.setQuantidade(Double.valueOf(txtQuantidade.getText()));
				
				dao.select(p);
				
				txtCodigoProduto.setText(String.valueOf(p.getIdProdutos()));
				txtCodigoBarras.setText(String.valueOf(p.getCodigoBarras()));
				txtAplicacao.setText(p.getAplicacao());
				txtDescricao.setText(p.getDescricao());
				txtMedida.setText(p.getMedida());
				fmtValorVenda.setText(String.valueOf(p.getValorVenda()));
				fmtValorCusto.setText(String.valueOf(p.getValorCusto()));


DAO
		try {
			ResultSet rs;
			conecta.conexao();
			PreparedStatement pst = conecta.conn
					.prepareStatement("select * from produtos where idProdutos = %?% or codigoBarras = %?% or descricao = %?% or "
							+ "aplicacao = %?% or medida = %?% or valorVenda = %?% or valorCusto = %?% or quantidade = %?%");
			rs = pst.executeQuery();
			p.setIdProdutos(rs.getInt("idProdutos"));
			p.setCodigoBarras(rs.getLong("codigoBarras"));
			p.setDescricao(rs.getString("descricao"));
			p.setAplicacao(rs.getString("aplicacao"));
			p.setMedida(rs.getString("medida"));
			p.setValorVenda(rs.getDouble("valorVenda"));
			p.setValorCusto(rs.getDouble("valorCusto"));
			p.setQuantidade(rs.getDouble("quantidade"));
			
			// JOptionPane.showMessageDialog(null, "Salvo com sucesso");
		} catch (SQLException e1) {
			JOptionPane.showMessageDialog(null, "Erro na pesquisa \n Erro "
					+ e1.getMessage());
		}
	}
Ricardo Lima

Ricardo Lima

Curtidas 0

Melhor post

Aldair Gomes

Aldair Gomes

08/05/2015

Olá Ricardo,
se eu entendi bem, vc tem que fazer uma pesquisa apenas pelo nome do produto certo?
se for isso Use Like.

é uma pesquisa que vai te trazer uma lista?como é? não ficou bem especificado.
att.
GOSTEI 1

Mais Respostas

Ricardo Lima

Ricardo Lima

07/05/2015

Esqueci de mostrar a classe Produtos, na qual faço referencia em ambas as classes citadas a cima

public class Produtos {
	//declaração de variaves
	private int idProdutos;
	private long codigoBarras;
	private String descricao;
	private String aplicacao;
	private String medida;
	private String lote;
	private double valorVenda;
	private double valorCusto;
	private double quantidade;
	
	//método construtor
	public Produtos(){
		
	}
	
	/*//Método construtor aprimorado
	public Produtos(int idProdutos,int codigoBarras,String descricao,String aplicacao,String medida,Boolean ativo, String dataValidade,  String dataFabricacao,String lote) throws ParseException {
		SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyy");
		
		this.idProdutos = idProdutos;
		this.codigoBarras = codigoBarras;
		this.descricao = descricao;
		this.aplicacao = aplicacao;
		this.medida =medida;
		this.ativo = ativo;
		this.dataValidade = df.parse(dataValidade);
		this.dataFabricacao = df.parse(dataFabricacao);
		this.lote = lote;	
	}*/


// inicio dos getters
	public int getIdProdutos() {
		return idProdutos;
	}
	public long getCodigoBarras() {
		return codigoBarras;
	}

	public String getDescricao() {
		return descricao;
	}

	public String getAplicacao() {
		return aplicacao;
	}

	public String getMedida() {
		return medida;
	}

	public String getLote() {
		return lote;
	}
	
	public double getValorVenda(){
		
		return valorVenda;
	}
	
	public double getValorCusto(){
		
		return valorCusto;
		
	}
	
	public double getQuantidade(){
		
		return quantidade;
	}
	

	// inicio dos setters 
	
	public void setIdProdutos(int idProdutos) {
		this.idProdutos = idProdutos;
	}
	
	public void setCodigoBarras(long codigoBarras) {
		
		this.codigoBarras = codigoBarras;
		
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public void setAplicacao(String aplicacao) {
		this.aplicacao = aplicacao;
	}
	public void setMedida(String medida) {
		this.medida = medida;
	}
	
	public void setLote(String lote) {
		this.lote = lote;
	}
	
	
	public void setValorVenda(double valorVenda){
		
		this.valorVenda = valorVenda;
		
	}
	
	public void setValorCusto(double valorCusto){
		
		this.valorCusto = valorCusto;
		
	}
	
	public void setQuantidade(double quantidade){
		
		this.quantidade = quantidade;
		
	}
	
	

}
GOSTEI 0
Ricardo Lima

Ricardo Lima

07/05/2015

A pesquisa não e apenas pelo nome do produto, os campos utilizados serão informados pelo usuário. Por exemplo, se o usuário quiser pesquisar pelo codigo, o sistema traz todas as informações. Se ele decidir pesquisar pela descrição, da mesma maneira o sistema tem que trazer todas as informações do produto...

A minha dúvida encontra-se no momento que essa pesquisa acontece, quando o usuário coloca o numero do produto (código), o sistema da erro informando que tem campo vazio e não pode prosseguir. Clicando no erro, ele direciona para o próximo campo que não estava preenchido. Se escolher pesquisar pela descrição, o erro acontece no código do produto (1º campo da pesquisa)


Poderia me dar um exemplo de pesquisa usando o LIKE???


Obrigado
GOSTEI 0
Aldair Gomes

Aldair Gomes

07/05/2015

Certo,

1º Atributos de tipos numéricos não aceitam valores NULL, mas aceitam 0 (zero), pode ser este o motivo.

2º seu select está estranho, como vc substitui estas interrogações?
use o pst.setString(1,valor);

sendo "setString" o tipo do valor no banco, o parametro 1 é a posição da interrogação em sequencia, e o segundo é o valor pelo qual vai substituir.

try {
        ResultSet rs;
        conecta.conexao();
        PreparedStatement pst = conecta.conn
                .prepareStatement("select * from produtos where idProdutos = %?% or codigoBarras = %?% or descricao = %?% or "
                        + "aplicacao = %?% or medida = %?% or valorVenda = %?% or valorCusto = %?% or quantidade = %?%");
        rs = pst.executeQuery();
        p.setIdProdutos(rs.getInt("idProdutos"));
        p.setCodigoBarras(rs.getLong("codigoBarras"));
        p.setDescricao(rs.getString("descricao"));
        p.setAplicacao(rs.getString("aplicacao"));
        p.setMedida(rs.getString("medida"));
        p.setValorVenda(rs.getDouble("valorVenda"));
        p.setValorCusto(rs.getDouble("valorCusto"));
        p.setQuantidade(rs.getDouble("quantidade"));
         
        // JOptionPane.showMessageDialog(null, "Salvo com sucesso");
    } catch (SQLException e1) {
        JOptionPane.showMessageDialog(null, "Erro na pesquisa \n Erro "
                + e1.getMessage());
    }
GOSTEI 1
Ricardo Lima

Ricardo Lima

07/05/2015

Eu entendi o que você disse. Vou testar e já falo aqui.

Obrigado
GOSTEI 0
Ricardo Lima

Ricardo Lima

07/05/2015

Eu entendi o que você disse. Vou testar e já falo aqui.

Obrigado
GOSTEI 0
Aldair Gomes

Aldair Gomes

07/05/2015

Ok, Fico no aguardo meu amigo.
GOSTEI 0
Ricardo Lima

Ricardo Lima

07/05/2015

Eu tentei aqui, más apareceu a seguinte mensagem

before start of result set

O que devo estar fazendo de errado?
GOSTEI 0
Aldair Gomes

Aldair Gomes

07/05/2015

Manda o código...
mas provavelmente, deve ser a Instancia do ResultSet,
Faça a isntancia od Result set depois de substituir os valores das interrogações.
GOSTEI 0
Ricardo Lima

Ricardo Lima

07/05/2015

Era isso mesmo. Deu certinho. Obrigado
GOSTEI 0
Aldair Gomes

Aldair Gomes

07/05/2015

Opa, que bom que pude ajudar... :D
abraço.
GOSTEI 0
POSTAR