Erro ao pesquizar fornecedor

6 respostas
rafaelantonio1986

Esta dando o seguinte erro :

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘LIKE ‘%%’’ at line 1

O codigo é o seguinte da classe FornecedoresControl.java do pacote controle :

package SistemaJava.control;

import SistemaJava.AcessoBD.AcessoMySql;
import SistemaJava.model.Fornecedores;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Marcelo
 */
public class FornecedoresControl {
  
    public static final int PROCURA_POR_CODIGO = 1;
    public static final int PROCURA_POR_NOME = 2;
    public static final int PROCURA_POR_CIDADE = 3;
    public static final int PROCURA_POR_RUA = 4;

PreparedStatement pstm;
ResultSet rs;
public List<Fornecedores> localizaFornecedor(String texto, int tipo){
AcessoMySql mySql = new AcessoMySql();
String localizaFornecedor;
List<Fornecedores> listaFornecedores = new ArrayList();

switch (tipo){
    case 1:
        localizaFornecedor = "forCodigo LIKE ?";
     break;
      case 2:
        localizaFornecedor = "forNome LIKE ?";
     break;   
      case 3:
        localizaFornecedor = "forCidade LIKE ?";
     break;
        case 4:
        localizaFornecedor = "forRua LIKE ?";
     break;
          default:
        localizaFornecedor = "forCodigo LIKE ?";
     break;   
}

try{
pstm = mySql.conectar().prepareStatement("SELECT * FROM fornecedores"+
        "WHERE" + localizaFornecedor);
pstm.setString(1, "%" + texto + "%");
rs = pstm.executeQuery();
while(rs.next()){

     Fornecedores fornecedor = new Fornecedores();
          fornecedor.setForCodigo(rs.getInt("forCodigo"));
          fornecedor.setForNome(rs.getString("forNome"));
          fornecedor.setForCidade(rs.getString("forCidade"));
          fornecedor.setForEstado(rs.getString("forEstado"));
          fornecedor.setForNumero(rs.getString("forNumero"));
          fornecedor.setForCnpj(rs.getString("forCnpj"));
          fornecedor.setForRua(rs.getString("forRua"));
          listaFornecedores.add(fornecedor);
    
}
mySql.desconectar();
}
catch(SQLException e){
   e.printStackTrace();  
}
  return listaFornecedores;

} 




}

Segue o código da Classe frmLocalizarFornecedor do pacote visão:

package SistemaJava.view;

import SistemaJava.control.FornecedoresControl;
import SistemaJava.model.Fornecedores;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Marcelo
 */
public class frmLocalizarFornecedor extends javax.swing.JDialog {

    /** Creates new form frmLocalizarFornecedor */
    public frmLocalizarFornecedor(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    /** This metho
     * 
     *  * 
     * 
     * 
     * 
     * 
     * 
     * d 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() {

        jLabel1 = new javax.swing.JLabel();
        tfPesquisa = new javax.swing.JTextField();
        cbPesquisa = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        btPesquisa = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tbFornecedores = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Localizar Fornecedores");

        jLabel1.setText("Procurar:");

        cbPesquisa.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Código", "Nome", "Cidade", "Rua" }));

        jLabel2.setText("Por:");

        btPesquisa.setText("Pesquisar");
        btPesquisa.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btPesquisaActionPerformed(evt);
            }
        });

        tbFornecedores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Código", "Nome", "Cidade", "Estado", "Rua", "Numero", "Fornecedor"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, true, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(tbFornecedores);

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Cancel");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(tfPesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, 212, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel1))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel2)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(cbPesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
                                        .addComponent(btPesquisa))))
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(155, 155, 155)
                        .addComponent(jButton1)
                        .addGap(34, 34, 34)
                        .addComponent(jButton2)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tfPesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cbPesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btPesquisa))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(28, 28, 28)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        
    
    private void btPesquisaActionPerformed(java.awt.event.ActionEvent evt) {                                           
         listarFornecedores();
    }                                          
         public int forCodigo = 0;
         public String forNome = "";
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
        if (tbFornecedores.getSelectedRow()>=0){
        
        forCodigo = listaFornecedores.get(tbFornecedores.getSelectedRow()).getForCodigo();
        forNome = listaFornecedores.get(tbFornecedores.getSelectedRow()).getForNome();        
        frmProdutos.importaFornecedor(forCodigo, forNome);
        this.dispose();
        }else{
          JOptionPane.showMessageDialog(this, "Selecione um Fornecedor!");
        
        }
        
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                final frmLocalizarFornecedor dialog = new frmLocalizarFornecedor(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    public void windowClosing(java.awt.event.WindowEvent e) {
                        dialog.dispose();
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton btPesquisa;
    private javax.swing.JComboBox cbPesquisa;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable tbFornecedores;
    private javax.swing.JTextField tfPesquisa;
    // End of variables declaration                   

    DefaultTableModel tmFornecedores;
    List<Fornecedores> listaFornecedores;
    private void listarFornecedores() {
        FornecedoresControl fornecedoresControl = new FornecedoresControl();
        tmFornecedores = (DefaultTableModel) tbFornecedores.getModel();
        while (tmFornecedores.getRowCount()>0){
          tmFornecedores.removeRow(0);
        }
      listaFornecedores = fornecedoresControl.localizaFornecedor(
              tfPesquisa.getText().trim(),
              cbPesquisa.getSelectedIndex()+1);
       if(listaFornecedores.isEmpty()){
       JOptionPane.showMessageDialog(this, "Nenhum Fornecedor encontrado!");
       }                  
         for(int i=0; i<listaFornecedores.size();i++){
            tmFornecedores.addRow(new String[7]);
            tmFornecedores.setValueAt(listaFornecedores.get(i).getForCodigo(), i, 0);
            tmFornecedores.setValueAt(listaFornecedores.get(i).getForNome(), i, 1);
            tmFornecedores.setValueAt(listaFornecedores.get(i).getForCidade(), i, 2);
            tmFornecedores.setValueAt(listaFornecedores.get(i).getForEstado(), i, 3);
            tmFornecedores.setValueAt(listaFornecedores.get(i).getForRua(), i, 4);
            tmFornecedores.setValueAt(listaFornecedores.get(i).getForNumero(), i, 5);
            tmFornecedores.setValueAt(listaFornecedores.get(i).getForCnpj(), i, 6);
         }
    }
}

6 Respostas

iurysilva92
Olá amigo, tente fazer deste modo, vou colar aqui dois códigos ai vc  se da pra ser utilizado. falou.

cria uma string por exemplo

String consultarCliente = SELECT * FROM clientes WHERE nome LIKE ?;

depois vc cria um metodo assim

esse metodo faz a consulta

public List listarClientes(String nome){

List clientes = new ArrayList();

try{

AcessoMySQL mysql = new AcessoMySQL();

pstm = mysql.conectar().prepareStatement(consultarCliente);

pstm.setString(1, nome);

rs = pstm.executeQuery();

ClienteBean cli;

while (rs.next()){

cli = new ClienteBean();

cli.setCodigo(rs.getInt(codigo));

cli.setNome(rs.getString(nome));

cli.setEndereco(rs.getString(endereco));

cli.setBairro(rs.getString(bairro));

cli.setCidade(rs.getString(cidade));

cli.setUf(rs.getString(uf));

cli.setCep(rs.getString(cep));

cli.setTelefone(rs.getString(telefone));

clientes.add(cli);

}

mysql.desconectar();

}

catch(Exception e){

}

return clientes;

}

parceiro se vc não entender me passa o seu email, que eu anexo um projeto simples ai vc ve beleza.
cido18

Olá rafaelantonio1986,

Cara no like tá faltando as aspas simples tipo : like '% ? %'Outra coisa que você pode testar tambem é não concatenar tanto as strings e fazer:

"select * from fornecedores where xxx like '%?%'" é apenas um teste :smiley:

rafaelantonio1986

Coloque aspas simples e o erro anterior não aparece mais, mas agora esta aparecendo outro erro ao clicar no botão para pesquizar Fornecedores:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

tveronezi

Tá faltando espaco. Vc está criando uma string como…

“SELECT * FROM fornecedoresWHEREforCodigo LIKE ?”

rafaelantonio1986

Olá tv eronesi no select tem espaço no where, mas o erro esta dando é em relação a parametros eu acho, o erro é esse :

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

o codigo principal onde eu acho que esta o erro eu vou destacar em negrito para voce ver, na verdade eu estou fazendo uma busca por codigo, ou nome, ou rua, ou cidade

O codigo é o seguinte da classe FornecedoresControl.java do pacote controle :

[code]

package SistemaJava.control;

import SistemaJava.AcessoBD.AcessoMySql;
import SistemaJava.model.Fornecedores;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Marcelo
 */
public class FornecedoresControl {
  
    public static final int PROCURA_POR_CODIGO = 1;
    public static final int PROCURA_POR_NOME = 2;
    public static final int PROCURA_POR_CIDADE = 3;
    public static final int PROCURA_POR_RUA = 4;

[b]PreparedStatement pstm;
ResultSet rs;
public List<Fornecedores> localizaFornecedor(String texto, int tipo){
AcessoMySql mySql = new AcessoMySql();
String localizaFornecedor;
List<Fornecedores> listaFornecedores = new ArrayList();

switch (tipo){
    case 1:
        localizaFornecedor = "forCodigo LIKE ?";
     break;
      case 2:
        localizaFornecedor = "forNome LIKE ?";
     break;   
      case 3:
        localizaFornecedor = "forCidade LIKE ?";
     break;
        case 4:
        localizaFornecedor = "forRua LIKE ?";
     break;
          default:
        localizaFornecedor = "forCodigo LIKE ?";
     break;   
}

try{
pstm = mySql.conectar().prepareStatement("SELECT * FROM fornecedores"+
        "WHERE" + localizaFornecedor);
pstm.setString(1, "%" + texto + "%");
rs = pstm.executeQuery();[/b]
while(rs.next()){

     Fornecedores fornecedor = new Fornecedores();
          fornecedor.setForCodigo(rs.getInt("forCodigo"));
          fornecedor.setForNome(rs.getString("forNome"));
          fornecedor.setForCidade(rs.getString("forCidade"));
          fornecedor.setForEstado(rs.getString("forEstado"));
          fornecedor.setForNumero(rs.getString("forNumero"));
          fornecedor.setForCnpj(rs.getString("forCnpj"));
          fornecedor.setForRua(rs.getString("forRua"));
          listaFornecedores.add(fornecedor);
    
}
mySql.desconectar();
}
catch(SQLException e){
   e.printStackTrace();  
}
  return listaFornecedores;

} 




}
pmlm

rafaelantonio1986:
Olá tv eronesi no select tem espaço no where, mas o erro esta dando é em relação a parametros eu acho, o erro é esse :

Não tem não. O problema (ou pelo menos um deles) é a falta de espaços entre as palavras.

Criado 16 de julho de 2012
Ultima resposta 17 de jul. de 2012
Respostas 6
Participantes 5