Erro na Consulta

6 respostas
D

Boa tarde

Estou fazendo uma classe de consulta, onde tem 3 botões de Opção onde seria o meu parâmentro de Consulta, mas está dando o seguinte erro:
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parametros insuficientes. Eram esperados 1.
O método para pesquisar é o seguinte:
public String pesquisar(String campo, String valor) {
        String str = "Id_Música\t" + "Nome\t" + "Banda\t" + "Gênero\n";
        try {
            ps = con.prepareStatement("select * from musicas " +
                    " where "+campo+" LIKE '%"+valor+"%' ");
            
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                str +=  rs.getInt("id_musica") + "\t" +
                        rs.getString("nome") + "\t" +
                        rs.getString("banda") + "\t" +
                        rs.getString("genero") + "\n";
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return str;


    }
E a chamada deste método vinculado a um botão na classe de consulta eh a seguinte:
private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                             
       CadastroDAO dao = new CadastroDAO();
       String selecionado = "";
        if (rbNome.isSelected()) {
            selecionado = "nome";
        } else if (rbBanda.isSelected()) {
            selecionado = "banda";
        } else {
            selecionado = "genero";
        }
       String str=dao.pesquisar(campoNome.getText(), selecionado);
       txaResultados.setText(str);
       Date hoje = new Date(); // esta rotina eh para gerar um log.
       SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");

       ManipulaTxt txt = new ManipulaTxt("D:\NetBeansProjects\cadastroMusical\log_"+df.format(hoje)+".txt");
       txt.insereLinha(df.format(hoje)+", "+txfUser.getText()+", "+"Consultou no banco a Música: "+campoNome.getText(),true);
    }

Se alguém puder ajudar, desde já agradeço.

Att.
Diego Silva :)

6 Respostas

erico_kl

tua tabela musicas está de acordo com o ResultSet que você criou?
e por que você concatena todos os resultados em uma String só? não seria melhor criar uma classe Musica onde teriam os atributos encapsulados e tal?

D

erico_kl:
tua tabela musicas está de acordo com o ResultSet que você criou?
e por que você concatena todos os resultados em uma String só? não seria melhor criar uma classe Musica onde teriam os atributos encapsulados e tal?

É que os dados serão exibidos num textArea por isso está concatenado, não exta exibindo a consulta e dá aquele erro no console.

erico_kl

mas mesmo assim… ficaria mais interessante criar a classe…
você conferiu a tabela? se está de acordo com o RS?

D

erico_kl:
mas mesmo assim… ficaria mais interessante criar a classe…
você conferiu a tabela? se está de acordo com o RS?

Sim, está igual.

erico_kl

talvez se você setasse o parâmetro não diretamente na sql mas no PreparedStatement

ps.setString(1, valor);

e a sua sql ficaria:

"select * from musicas where "+campo+" like ?"
B
diego_silva:
Boa tarde Estou fazendo uma classe de consulta, onde tem 3 botões de Opção onde seria o meu parâmentro de Consulta, mas está dando o seguinte erro:
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parametros insuficientes. Eram esperados 1.
O método para pesquisar é o seguinte:
public String pesquisar(String campo, String valor) {
        String str = "Id_Música\t" + "Nome\t" + "Banda\t" + "Gênero\n";
        try {
            ps = con.prepareStatement("select * from musicas " +
                    " where "+campo+" LIKE '%"+valor+"%' ");
            
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                str +=  rs.getInt("id_musica") + "\t" +
                        rs.getString("nome") + "\t" +
                        rs.getString("banda") + "\t" +
                        rs.getString("genero") + "\n";
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return str;


    }
E a chamada deste método vinculado a um botão na classe de consulta eh a seguinte:
private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                             
       CadastroDAO dao = new CadastroDAO();
       String selecionado = "";
        if (rbNome.isSelected()) {
            selecionado = "nome";
        } else if (rbBanda.isSelected()) {
            selecionado = "banda";
        } else {
            selecionado = "genero";
        }
       String str=dao.pesquisar(campoNome.getText(), selecionado);
       txaResultados.setText(str);
       Date hoje = new Date(); // esta rotina eh para gerar um log.
       SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");

       ManipulaTxt txt = new ManipulaTxt("D:\NetBeansProjects\cadastroMusical\log_"+df.format(hoje)+".txt");
       txt.insereLinha(df.format(hoje)+", "+txfUser.getText()+", "+"Consultou no banco a Música: "+campoNome.getText(),true);
    }

Se alguém puder ajudar, desde já agradeço.

Att.
Diego Silva :)

Esse é seu método:
public String pesquisar(String campo, String valor) {
        String str = "Id_Música\t" + "Nome\t" + "Banda\t" + "Gênero\n";
        try {
            ps = con.prepareStatement("select * from musicas " +
                    " where "+campo+" LIKE '%"+valor+"%' ");
            
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                str +=  rs.getInt("id_musica") + "\t" +
                        rs.getString("nome") + "\t" +
                        rs.getString("banda") + "\t" +
                        rs.getString("genero") + "\n";
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return str;


    }
E essa é a chamada do método:
String selecionado = "";
        if (rbNome.isSelected()) {
            selecionado = "nome";
        } else if (rbBanda.isSelected()) {
            selecionado = "banda";
        } else {
            selecionado = "genero";
        }
       String str=dao.pesquisar(campoNome.getText(), selecionado);// <<< -------   Parâmetros invertidos

Preste atenção nos parametros do método e na forma como ele é chamado.
Você está invertentado as bolas.

O primeiro parâmetro é o nome do campo e o segundo é o valor.
Na chamada você está passando o valor como campo, e o campo como valor.

Entendeu??

Criado 22 de novembro de 2009
Ultima resposta 23 de nov. de 2009
Respostas 6
Participantes 3