Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 519209
            [titulo] => Pesquisa com JTextField vazio
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-05-08 11:00:25
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 333872
            [status] => A
            [isExample] => 
            [NomeUsuario] => Aldair Natan Bezerra do Nascimento Gomes
            [Login] => aldair.ngomes@gmail.com
            [Apelido] => Aldair Natan
            [Foto] => 333872_20160622095739.JPG
            [Conteudo] => 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. ) )

Pesquisa com JTextField vazio

Caldeira
|
MVP
Pontos: 500
    07 mai 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());
#Código
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
#Código
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());
}
}

Post mais votado

Aldair Natan
   - 08 mai 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.

Caldeira
|
MVP
Pontos: 500
    07 mai 2015

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

#Código
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;

}

}

Caldeira
|
MVP
Pontos: 500
    08 mai 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

Aldair Natan
   - 08 mai 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.

#Código
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());
}

Caldeira
|
MVP
Pontos: 500
    08 mai 2015

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

Obrigado

Caldeira
|
MVP
Pontos: 500
    08 mai 2015

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

Obrigado

Aldair Natan
   - 08 mai 2015

Ok, Fico no aguardo meu amigo.

Caldeira
|
MVP
Pontos: 500
    09 mai 2015

Eu tentei aqui, más apareceu a seguinte mensagem

before start of result set

O que devo estar fazendo de errado?

Aldair Natan
   - 09 mai 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.

Caldeira
|
MVP
Pontos: 500
    09 mai 2015

Era isso mesmo. Deu certinho. Obrigado

Aldair Natan
   - 09 mai 2015

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