Erro ao preencher JTextField

24 respostas
meyer

Olá galera,
Estou com dificuldade de achar o erro ao preencher JTextField, poderem me ajudar agradeço.
O erro é o seguinte:
java.sql.SQLException: Illegal operation on empty result set.

a informação não esta fazia no banco de dados, mas mesmo assim da esse erro.

public void preencheCampos() {

int linha = lista.getSelectedIndex();

System.out.println(linha);

conn = Conexao.conector();

try {

if (linha >= 0) {

String sql = Select * from tbproduto where produto_cod=’” + linha + “’”;

pst = conn.prepareStatement(sql);

rs = pst.executeQuery();

rs.first();

txtValorUnitario.setText(String.valueOf(rs.getString(produto_valor)));

}
} catch (Exception erro) {
        JOptionPane.showMessageDialog(null, "Erro ao mostrar dados " + erro);
        System.out.println(erro);
    }
}

24 Respostas

meyer

Uma observação o erro acontecer em alguns produtos não é com todos.
Mas todos foram cadastrados do mesmo jeito.

staroski

Sua consulta não trouxe resultados.

Implemente assim:

String sql = Select * from tbproduto where produto_cod = ?;
pst = conn.prepareStatement(sql);
pst.setInt(1, linha);
rs = pst.executeQuery();
String valor;
if (rs.next()) {
    valor = rs.getString(produto_valor);
} else {
    valor = "";
}
txtValorUnitario.setText(valor);
meyer

staroski boa tarde,
Então continua do mesmo a unica diferença agora é que não aparece a mensagem java.sql.SQLException: Illegal operation on empty result set.

Mas os produtos que retorna vazio esta cadastrado no banco de dados.
Tenho 5 produtos cadastrados no banco, desses 5 2 estão não traz resultado.

meyer

Outra que percebi fazendo uns teste é que quando clico no Jlist para preencher o txtValorUnitario ele esta trazendo o valor errado.
por exemplo: clico em um produto em traz o valor de outro.

staroski

E conferiu se o select está certo?

staroski

Posta seu código fonte completo.
Não dá pra adivinhar como você implementou. :wink:

meyer

Essa é minha lista responsável por fazer a pesquisa do nome do produto no banco.

public void listaDePesquisa() {

String sql = Select * from tbproduto where produto_nome like '” + txtPesquisa_ProdutosServicos.getText() + %'order by produto_nome;

modeloList.removeAllElements();

try {

conn = Conexao.conector();

pst = conn.prepareStatement(sql);

rs = pst.executeQuery();

int v = 0;

while (rs.next() & v < 10) {

modeloList.addElement(rs.getString(produto_cod) + " " + rs.getString(produto_nome));

<a href="//modeloList.addElement">//modeloList.addElement</a>(rs.getString(“produto_nome”));

v++;

}

if (v >= 1) {

lista.setVisible(true);

} else {

lista.setVisible(false);

}
} catch (SQLException erro) {
        JOptionPane.showMessageDialog(null, "Erro ao listar dados " + erro);
    }

}

E esse é o método responsável por preencher txtValorUnitario

public void teste() {

int linha = lista.getSelectedIndex();

conn = Conexao.conector();

try {

String sql = Select * from tbproduto where produto_cod = ?;

pst = conn.prepareStatement(sql);

pst.setDouble(1, linha);

rs = pst.executeQuery();

String valor;

if (rs.next()) {

valor = rs.getString(produto_valor);

} else {

valor = **;

}

txtValorUnitario.setText(valor);

} catch (SQLException erro) {

JOptionPane.showMessageDialog(null, "Erro ao mostrar dados " + erro);

}

}

Observação: deletei todos os produtos e cadastrei outros, agora todos retornam vazios.

staroski

E já conferiu se o SELECT que seu programa faz, está certo, se os parâmetros que você passa para o PreparedStatement estão certos?
Já pegou o mesmo SELECT que você faz no Java e executou diretamente no banco pra ver se traz resultados?

Dicas:

  • Se você só vai ler 2 colunas, não faça SELECT *, faça SELECT COLUNA_1, COLUNA_2;
  • Se você usa PreparedStatement, não deve concatenar os parâmetros na String da query;
  • Procure separar o acesso ao banco da sua interface de usuário, crie uma camada própria pra isso, a interface de usuário deveria interagir somente com os objetos pertinentes ao modelo do seu problema.
meyer

Respondendo seus questionamentos
E já conferiu se o SELECT que seu programa faz, está certo? Sim esta, fiz o teste no banco e retorna certinho.
Se os parâmetros que você passa para o PreparedStatement estão certos? Sim estão

staroski

Aqui você concatena os parâmetros na String antes de criar o PreparedStatement.
Quando se usa PreparedStatement, não se concatena parâmetros na String, você põe o parâmetro como ? e seta com um método setTipoDeDado(coluna, conteúdo).
Você realmente precisa retornar todas as colunas nesse select?

O código do produto é realmente um double na tabela do banco?
E novamente, você precisa realmente retornar todas as colunas neste select?

meyer

Bom dia,
Eu fiz sem concatenar também aí só foi um teste o que preciso mesmo é só retorna o produto_valor
No meu banco o produto_valor está como decimal(10,2).

staroski

Legal, mas essa sua query aqui está errada:

String sql = Select * from tbproduto where produto_cod = ?;
pst = conn.prepareStatement(sql);
pst.setDouble(1, linha); // produto_cod é um decimal no banco???
rs = pst.executeQuery();
meyer

Oque é decimal no banco é só o produto_valor.

staroski

Então não faz sentido tu setar o parâmetro de consulta com setDouble :wink:

meyer

Entendi não tinha trabalhado com decimal ainda.
Devo setar como oque ?

staroski

Creio que ainda não entendeu como funciona o PreparedStatement.

Veja a string abaixo:

String sql = Select * from tbproduto where produto_cod = ?;
pst = conn.prepareStatement(sql);

Quando você usa o PreparedStatement, os parâmetros são identificados por ?

Então para setar o valor com o qual o produto_cod será comparado. você precisa usar o método set apropriado.

pst.setTipoDeDado(numeroDoParametro, valorDoParametro);

Como só tem um parâmetro, o número dele será 1;

`pst.setTipoDeDado(1, valorDoParametro);`

Se o produto_cod é um inteiro, você vai fazer:

`pst.setInt(1, umValorInt);`

Se o produto_cod é decimal, você vai fazer:

`pst.setDouble(1, umValorDouble);`

Se o produto_cod é String, você vai fazer:

`pst.setString(1, valorString);`
meyer

A minha variável é double
E no banco é decimal
Então o correto é
pst.setDouble(1, “produto_valor”);

staroski

Não amiguinho, você ainda não entendeu!

Preste atenção no seu select:

select * from tbproduto where produto_cod = ?

A cláusula where procura produto que tenha um produto_cod que atenda a seguinte condição:

produto_cod = ?

Quando você faz o PreparedStatement.setAlgumaCoisa, você tem que usar o método apropriado com o tipo de dado desse parâmetro e aí o driver JDBC vai tratar de substituir o ? adequadamente ao executar a query.

meyer

Meu já fiz CRUD várias vezes imaginei q sabia oque estava fazendo, pelo jeito tenho muito que aprender.
Fiquei confuso agora.
Se não é dessa forma que fiz não tô entendendo como fazer.
Desculpa amigo vc esta me ajudando muito.
Mas agora travei.
Poderia citar um exemplo de como eu faria essa linha de código.

staroski
  • Posta o nome e o tipo de dado das colunas;
  • Posta o código completo da tela que você fez.
meyer

Segue abaixo o código completo e tabela do banco de dados

create table tbproduto(

produto_cod int primary key auto_increment,

produto_nome varchar(100) not null,

produto_valor decimal(10,2) not null,

produto_estoque int(11) not null,

produto_imagem varchar(100)

);

Esse é o modelo da tela Produto

private int codProduto;

private String nomeProduto;

private double valorProduto;

private int estoqueProduto;

private String caminhoProduto;

private String pesquisaProduto;
public ModeloProduto() {
}

public ModeloProduto(int codProduto, String nomeProduto, double valorProduto, int estoqueProduto) {
    this.codProduto = codProduto;
    this.nomeProduto = nomeProduto;
    this.valorProduto = valorProduto;
    this.estoqueProduto = estoqueProduto;
    this.caminhoProduto = caminhoProduto;
    this.pesquisaProduto = pesquisaProduto;
}

/**
 * @return the codProduto
 */
public int getCodProduto() {
    return codProduto;
}

/**
 * @param codProduto the codProduto to set
 */
public void setCodProduto(int codProduto) {
    this.codProduto = codProduto;
}

/**
 * @return the nomeProduto
 */
public String getNomeProduto() {
    return nomeProduto;
}

/**
 * @param nomeProduto the nomeProduto to set
 */
public void setNomeProduto(String nomeProduto) {
    this.nomeProduto = nomeProduto;
}

/**
 * @return the valorProduto
 */
public double getValorProduto() {
    return valorProduto;
}

/**
 * @param valorProduto the valorProduto to set
 */
public void setValorProduto(double valorProduto) {
    this.valorProduto = valorProduto;
}

/**
 * @return the estoqueProduto
 */
public int getEstoqueProduto() {
    return estoqueProduto;
}

/**
 * @param estoqueProduto the estoqueProduto to set
 */
public void setEstoqueProduto(int estoqueProduto) {
    this.estoqueProduto = estoqueProduto;
}

/**
 * @return the caminhoProduto
 */
public String getCaminhoProduto() {
    return caminhoProduto;
}

/**
 * @param caminhoProduto the caminhoProduto to set
 */
public void setCaminhoProduto(String caminhoProduto) {
    this.caminhoProduto = caminhoProduto;
}

/**
 * @return the pesquisaProduto
 */
public String getPesquisaProduto() {
    return pesquisaProduto;
}

/**
 * @param pesquisaProduto the pesquisaProduto to set
 */
public void setPesquisaProduto(String pesquisaProduto) {
    this.pesquisaProduto = pesquisaProduto;
}

}

– Abaixo Controle produto
public class ControleProduto {

Conexao con = new Conexao();
Connection conexao;
PreparedStatement pst;
ResultSet rs;

public void InserirProduto(ModeloProduto modelo) {
    String sql = "insert into tbproduto(produto_nome,produto_valor,produto_estoque,produto_imagem)values(?,?,?,?)";
    try {
        conexao = Conexao.conector();
        pst = conexao.prepareStatement(sql);
        pst.setString(1, modelo.getNomeProduto());
        pst.setDouble(2, modelo.getValorProduto());
        pst.setInt(3, modelo.getEstoqueProduto());
        pst.setString(4, modelo.getCaminhoProduto());

        int inserido = pst.executeUpdate();
        if (inserido > 0) {
            JOptionPane.showMessageDialog(null, "Produto inserido com sucesso");

        }

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao inserir produto " + ex);
        System.out.println("Erros " + ex.getMessage());
    }

}

public void editarProduto(ModeloProduto modelo) {
    String sql = "update tbproduto set produto_nome=?,produto_valor=?,produto_estoque=?,produto_imagem=? where produto_cod=?";
    try {
        conexao = Conexao.conector();
        pst = conexao.prepareStatement(sql);
        pst.setString(1, modelo.getNomeProduto());
        pst.setDouble(2, modelo.getValorProduto());
        pst.setInt(3, modelo.getEstoqueProduto());
        pst.setString(4, modelo.getCaminhoProduto());
        pst.setInt(5, modelo.getCodProduto());

        int atualizado = pst.executeUpdate();
        if (atualizado > 0) {
            JOptionPane.showMessageDialog(null, "Produto editado com sucesso");

        }

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao editar produto. \n ERRO: " + ex.getMessage());
        System.out.println("Erros " + ex.getMessage());
    }
}

public void exluirProduto(ModeloProduto modelo) {
    Conexao.conector();
    String sql = "delete from tbproduto where produto_cod = ?";

    try {
        pst = conexao.prepareStatement(sql);
        pst.setInt(1, modelo.getCodProduto());
        pst.executeUpdate();
        JOptionPane.showMessageDialog(null, "Produto excluido com sucesso");
    } catch (HeadlessException | SQLException e) {
        JOptionPane.showMessageDialog(null, "Erro ao excluir produto " + e.getMessage());
    }
}

public void pesquisarProduto(ModeloProduto modelo) {
    String sql = "select * from tbproduto where produto_nome like'%" + modelo.getPesquisaProduto() + "%'";

    try {
        conexao = Conexao.conector();
        pst = conexao.prepareStatement(sql);
        rs = pst.executeQuery();

        if (rs.next()) {
            modelo.setCodProduto(Integer.parseInt(rs.getString("produto_cod")));
            modelo.setNomeProduto(rs.getString("produto_nome"));
            modelo.setValorProduto(Double.parseDouble(rs.getString("produto_valor")));
            modelo.setEstoqueProduto(Integer.parseInt(rs.getString("produto_estoque")));
            modelo.setCaminhoProduto(rs.getString("produto_imagem"));

        } else if (rs.next() == false) {
            JOptionPane.showMessageDialog(null, "Produto não existe");
        }

    } catch (SQLException e2) {
        JOptionPane.showMessageDialog(null, "Erro ao pesquisar produto");
        System.out.println(e2);
    }
}

}

Agora abaixo a tela que estou tendo problemas

public class TelaPDV extends javax.swing.JInternalFrame {

Connection conn;
Conexao conexao = new Conexao();
ModeloPDV modelo = new ModeloPDV();
ControlePDV controleP = new ControlePDV();
ControlePDV controle = new ControlePDV();

ModeloProduto modeloPro = new ModeloProduto();

PreparedStatement pst;
ResultSet rs;
int flag = 0;
int enter = 0;

DefaultListModel modeloList;

/**
 * Creates new form TelaPDV
 */
public TelaPDV() {
    initComponents();
    conn = Conexao.conector();
    preencherCliente();
    lista.setVisible(false);
    modeloList = new DefaultListModel();
    lista.setModel(modeloList);
}

public void preencherCliente() {
    conn = Conexao.conector();

    String sql = "Select * from tbcliente order by nomecli";
    try {
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        rs.first();
        cbClientes.removeAllItems();
        do {
            cbClientes.addItem(rs.getString("nomecli"));
        } while (rs.next());
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null, "Erro ao preencher clientes " + e.getMessage());
        System.out.println(e.getMessage());
    }
}



public void setPosicao() {
    Dimension d = this.getDesktopPane().getSize();
    this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2);
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    grupoDeBotoes = new javax.swing.ButtonGroup();
    jPanel1 = new javax.swing.JPanel();
    txtQuantidade = new javax.swing.JTextField();
    txtDesconto = new javax.swing.JTextField();
    txtValorUnitario = new javax.swing.JTextField();
    txtValorTotal = new javax.swing.JTextField();
    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jLabel3 = new javax.swing.JLabel();
    jLabel4 = new javax.swing.JLabel();
    cbClientes = new javax.swing.JComboBox<>();
    jLabel8 = new javax.swing.JLabel();
    jPanel2 = new javax.swing.JPanel();
    txtPesquisa_ProdutosServicos = new javax.swing.JTextField();
    lista = new javax.swing.JList<>();
    rbProdutos = new javax.swing.JRadioButton();
    rbServicos = new javax.swing.JRadioButton();
    jLabel6 = new javax.swing.JLabel();
    lblItens = new javax.swing.JLabel();
    btnAdicionar = new javax.swing.JButton();
    btnFinalizaVenda = new javax.swing.JButton();
    btnCancelaVenda = new javax.swing.JButton();
    btnNovaVenda = new javax.swing.JButton();
    jPanel3 = new javax.swing.JPanel();
    jScrollPane1 = new javax.swing.JScrollPane();
    tblPDV = new javax.swing.JTable();

    setClosable(true);
    setIconifiable(true);

    jPanel1.setBackground(new java.awt.Color(206, 202, 202));
    jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));

    txtQuantidade.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

    txtDesconto.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

    txtValorUnitario.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    txtValorUnitario.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            txtValorUnitarioActionPerformed(evt);
        }
    });

    txtValorTotal.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

    jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    jLabel1.setText("QUANTIDADE");

    jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    jLabel2.setText("DESCONTO %");

    jLabel3.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    jLabel3.setText("VALOR UNITÁRIO R$");

    jLabel4.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    jLabel4.setText("VALOR TOTAL R$");

    cbClientes.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    cbClientes.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

    jLabel8.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    jLabel8.setText("Cliente");

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(cbClientes, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(txtValorUnitario)
                .addComponent(txtValorTotal)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel1)
                        .addComponent(txtQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(txtDesconto, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel2)))
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel3)
                        .addComponent(jLabel4)
                        .addComponent(jLabel8))
                    .addGap(0, 0, Short.MAX_VALUE)))
            .addContainerGap())
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap(24, Short.MAX_VALUE)
            .addComponent(jLabel8)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(cbClientes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(28, 28, 28)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addComponent(jLabel2)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(txtDesconto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(16, 16, 16))
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addComponent(jLabel1)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(txtQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(18, 18, 18)))
            .addComponent(jLabel3)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(txtValorUnitario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(24, 24, 24)
            .addComponent(jLabel4)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(txtValorTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(52, 52, 52))
    );

    jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {cbClientes, txtDesconto, txtQuantidade, txtValorTotal, txtValorUnitario});

    jPanel2.setBackground(new java.awt.Color(206, 202, 202));
    jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));

    txtPesquisa_ProdutosServicos.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    txtPesquisa_ProdutosServicos.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));
    txtPesquisa_ProdutosServicos.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            txtPesquisa_ProdutosServicosActionPerformed(evt);
        }
    });
    txtPesquisa_ProdutosServicos.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyPressed(java.awt.event.KeyEvent evt) {
            txtPesquisa_ProdutosServicosKeyPressed(evt);
        }
        public void keyReleased(java.awt.event.KeyEvent evt) {
            txtPesquisa_ProdutosServicosKeyReleased(evt);
        }
    });

    lista.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
    lista.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            listaMouseClicked(evt);
        }
    });

    grupoDeBotoes.add(rbProdutos);
    rbProdutos.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    rbProdutos.setText("Produtos");
    rbProdutos.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            rbProdutosActionPerformed(evt);
        }
    });

    grupoDeBotoes.add(rbServicos);
    rbServicos.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    rbServicos.setText("Serviços");

    jLabel6.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    jLabel6.setText("Itens");

    lblItens.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    lblItens.setText("Itens");

    btnAdicionar.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
    btnAdicionar.setText("ADICIONAR");
    btnAdicionar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnAdicionarActionPerformed(evt);
        }
    });

    btnFinalizaVenda.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    btnFinalizaVenda.setText("Finalizar Venda");

    btnCancelaVenda.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    btnCancelaVenda.setText("Cancela Venda");

    btnNovaVenda.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
    btnNovaVenda.setText("Nova venda");

    tblPDV.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
    tblPDV.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
    tblPDV.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {},
            {},
            {},
            {}
        },
        new String [] {

        }
    ));
    tblPDV.setGridColor(new java.awt.Color(255, 255, 255));
    jScrollPane1.setViewportView(tblPDV);

    javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
    jPanel3.setLayout(jPanel3Layout);
    jPanel3Layout.setHorizontalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 535, Short.MAX_VALUE)
    );
    jPanel3Layout.setVerticalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 98, Short.MAX_VALUE)
            .addContainerGap())
    );

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addGroup(jPanel2Layout.createSequentialGroup()
            .addGap(10, 10, 10)
            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addComponent(rbProdutos)
                    .addGap(10, 10, 10)
                    .addComponent(rbServicos)
                    .addGap(230, 230, 230)
                    .addComponent(jLabel6)
                    .addGap(10, 10, 10)
                    .addComponent(lblItens))
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addGap(6, 6, 6)
                            .addComponent(lista, javax.swing.GroupLayout.PREFERRED_SIZE, 390, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(txtPesquisa_ProdutosServicos, javax.swing.GroupLayout.PREFERRED_SIZE, 406, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(6, 6, 6)
                    .addComponent(btnAdicionar))
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addComponent(btnFinalizaVenda)
                    .addGap(6, 6, 6)
                    .addComponent(btnCancelaVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(10, 10, 10)
                    .addComponent(btnNovaVenda))))
    );
    jPanel2Layout.setVerticalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel2Layout.createSequentialGroup()
            .addGap(11, 11, 11)
            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(4, 4, 4)
                    .addComponent(rbProdutos))
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(4, 4, 4)
                    .addComponent(rbServicos))
                .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(2, 2, 2)
                    .addComponent(lblItens, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)))
            .addGap(7, 7, 7)
            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(txtPesquisa_ProdutosServicos, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(btnAdicionar, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(43, 43, 43)
                    .addComponent(lista, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)))
            .addGap(18, 18, 18)
            .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(btnFinalizaVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(btnCancelaVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(3, 3, 3)
                    .addComponent(btnNovaVenda))))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addContainerGap())
    );

    pack();
}// </editor-fold>                        

private void txtValorUnitarioActionPerformed(java.awt.event.ActionEvent evt) {                                                 
    // TODO add your handling code here:
}                                                

private void btnAdicionarActionPerformed(java.awt.event.ActionEvent evt) {                                             


}                                            

private void txtPesquisa_ProdutosServicosKeyPressed(java.awt.event.KeyEvent evt) {                                                        


}                                                       
TelaAdicionaProdutosVenda telaAdProVenda;
private void rbProdutosActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (telaAdProVenda == null) {
        telaAdProVenda = new TelaAdicionaProdutosVenda();
        desktop.add(telaAdProVenda);
        telaAdProVenda.setVisible(true);
        telaAdProVenda.setPosicao();

    } else if (telaAdProVenda.isClosed()) {
        telaAdProVenda = new TelaAdicionaProdutosVenda();
        desktop.add(telaAdProVenda);
        telaAdProVenda.setVisible(true);
        telaAdProVenda.setPosicao();
        desktop.moveToFront(telaAdProVenda);

    } else {
        JOptionPane.showMessageDialog(null, "A tela usuário já esta aberta");
    }
    desktop.moveToFront(telaAdProVenda);


}                                          

private void txtPesquisa_ProdutosServicosKeyReleased(java.awt.event.KeyEvent evt) {                                                         
    listaDePesquisa();
//        modeloPro.setPesquisaProduto(txtPesquisa_ProdutosServicos.getText());

//        controleP.listaDePesquisa(modeloPro);

//        txtValorUnitario.setText(String.valueOf(modeloPro.getValorProduto()));
}                                                        

private void txtPesquisa_ProdutosServicosActionPerformed(java.awt.event.ActionEvent evt) {                                                             

}                                                            

private void listaMouseClicked(java.awt.event.MouseEvent evt) {                                   

    lista.setVisible(true);
    preencheCampos();

// teste();

}
//    public void ListaDeProdutos(ModeloProduto modelo) {

//        modelo.setPesquisaProduto(txtPesquisa_ProdutosServicos.getText());

//        controle.pesquisarProduto(modelo);

//

//

//        //preencherTabela(“select * from tbproduto where produto_nome like’%” + modelo.getPesquisaProduto() + “%’”);

//    }

public void listaDePesquisa() {

String sql = Select * from tbproduto where produto_nome like '” + txtPesquisa_ProdutosServicos.getText() + %'order by produto_nome;

//String sql = “Select produto_cod,produto_nome,produto_valor,produto_estoque from tbproduto where produto_nome like '” + txtPesquisa_ProdutosServicos.getText() + “%'order by produto_nome”;

modeloList.removeAllElements();

try {

conn = Conexao.conector();

pst = conn.prepareStatement(sql);

rs = pst.executeQuery();

int v = 0;

while (rs.next() & v < 8) {

<a href="//modeloList.addElement">//modeloList.addElement</a>(rs.getString(“produto_valor”) + " " + rs.getString(“produto_nome”));

modeloList.addElement(rs.getString(produto_nome));

v++;

}

if (v >= 1) {

lista.setVisible(true);

} else {

lista.setVisible(false);

}
} catch (SQLException erro) {
        JOptionPane.showMessageDialog(null, "Erro ao listar dados " + erro);
    }

}
//    public void mostraProduto() {

//        conn = Conexao.conector();

//        try {

//            int linha = lista.getSelectedIndex();

//            if (linha >= 0) {

//                String sql = “Select produto_cod,produto_nome,produto_valor,produto_estoque from tbproduto where produto_nome '” + “” + txtPesquisa_ProdutosServicos.getText() + "%’ order by produto_nome " + linha;

//                pst = conn.prepareStatement(sql);

//                rs = pst.executeQuery();

//            }

//        } catch (SQLException erro) {

//            JOptionPane.showMessageDialog(null, "Erro ao mostrar dados " + erro);

//        }

//    }

public void teste() {

conn = Conexao.conector();

int linha = lista.getSelectedIndex();
try {

        String sql = "Select produto_valor from tbproduto where produto_cod = ?";
        //String sql = "Select produto_valor from tbproduto where produto_cod='" + linha + "'";
        pst = conn.prepareStatement(sql);
        pst.setDouble(1, linha);
        rs = pst.executeQuery();
        String valor;
        if (rs.next()) {
            if (linha >= 0) {
                txtValorUnitario.setText(String.valueOf(modelo.getValor_unitario()));
            }
            valor = rs.getString("produto_valor");

        } else {
            valor = "NADA";
        }

    } catch (SQLException erro) {
        JOptionPane.showMessageDialog(null, "Erro ao mostrar dados " + erro);
    }
}

public void preencheCampos() {
    int linha = lista.getSelectedIndex();

    System.out.println(linha);
    conn = Conexao.conector();
    try {

        String sql = "Select produto_valor from tbproduto where produto_cod='" + linha + "'";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        if (rs.next()) {
            System.out.println("4");
            if (linha >= 0) {
                System.out.println("5");

                //System.out.println(rs.next());
                txtValorUnitario.setText(String.valueOf(rs.getString("produto_valor")));
                //txtQuantidade.setText(String.valueOf(rs.getString("produto_estoque")));
                System.out.println("6");
            }
        } else {
            JOptionPane.showMessageDialog(null, "Produto não encontrado");
        }
    } catch (SQLException erro) {
        JOptionPane.showMessageDialog(null, "Erro ao mostrar dados " + erro);
        System.out.println(erro);
    }
}
meyer
Consegui, agora parou de vir consulta vazia, fiz conforme abaixo

eu estava fazendo assim pst.setDouble(1, umValorInteiro);

sendo que o correto é pst.setDouble(1, umValorDouble);

Só que os valores estão vindo errado quando clico em um produto vem o valor de outro produto.

staroski

Não tive tempo de te responder, mas sua implementação está muito bagunçada.
Você preenche a lista com Strings contendo o nome dos produtos, ao invés disso você deveria ter um ListModel para renderizar um List<ModeloProduto>.
Vai por mim, separa a camada de persistência dessa sua tela e usa adequadamente o MVC do Swing.

meyer

Ok, vou tentar fazer isso.

Criado 18 de fevereiro de 2018
Ultima resposta 21 de fev. de 2018
Respostas 24
Participantes 2