Erro na Consulta

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:

[code]
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;


}[/code]

E a chamada deste método vinculado a um botão na classe de consulta eh a seguinte:

[code]
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);
}[/code]

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

Att.
Diego Silva :slight_smile:

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?

[quote=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?[/quote]

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

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

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

Sim, está igual.

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 ?"

[quote=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:

[code]
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;


}[/code]

E a chamada deste método vinculado a um botão na classe de consulta eh a seguinte:

[code]
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);
}[/code]

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

Att.
Diego Silva :)[/quote]

Esse é seu método:

[code]
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;


}[/code]

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??