Não estou conseguindo fazer o Método listar com condição where
12 respostasResolvido
java
A
AntonioPaes
Pessoal estou tentando fazer um método listar que trás do banco de dados todas as minha avaliações Físicas do banco de dados da tabela avaliacao, porém preciso de todas as avaliações que tenham um determinado nome, vou postar o código abaixo para ficar mais facil de entender.
publicArrayList<Avaliacao>listaAvaliacao(Stringnome)throwsDaoException,ConexaoException{Connectionconnection=conexao.conectar();Stringsql="select nome,data_avaliacao from avaliacao where nome = ?";try{PreparedStatementpst=connection.prepareStatement(sql);pst.setString(1,nome);ResultSetrs=pst.executeQuery(sql);ArrayList<Avaliacao>lista=newArrayList();Avaliacaoavaliacao;while(rs.next()){avaliacao=newAvaliacao();avaliacao.setNome(rs.getString("nome"));avaliacao.setDataAvaliacao(rs.getString("data_avaliacao"));lista.add(avaliacao);}returnlista;}catch(SQLExceptione){thrownewDaoException(e);}finally{conexao.desconectar(connection);}}}
Quando executo esse método aparece o seguinte erro:
Err0com.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 ‘?’ at line 1.
Oi Antônio, bom dia, seja bem vindo ao Fórum. Cara, esse jeito que vc faz eu nunca tentei…
Mas tenta assim:
SELECT nome, data_avaliacao FROM avaliacao WHERE nome = ' " + campo_de_pesquisa.getText() + " '
Ou tenta colocar o ponto de interrogação entre o apóstrofo: … WHERE nome = '?'
J
Solucao aceita
JFSantos-RJ
PreparedStatement não aceita concatenação, eu acho.
Acho que no executeQuery() não leva nenhum parametro.
o prepareStatement já pega o Sql.
sendo assim fica ao parecido com isso:
publicList<Avaliacao>listaAvaliacao(Stringnome)throwsDaoException,ConexaoException{Connectionconnection=conexao.conectar();Stringsql="SELECT nome, data_avaliacao FROM avaliacao WHERE nome= ?";try{PreparedStatementpst=connection.prepareStatement(sql);pst.setString(1,nome);ResultSetrs=pst.executeQuery();List<Avaliacao>lista=newArrayList<>();Avaliacaoavaliacao=null;while(rs.next()){avaliacao=newAvaliacao();avaliacao.setNome(rs.getString("nome"));avaliacao.setDataAvaliacao(rs.getString("data_avaliacao"));lista.add(avaliacao);}returnlista;rs.close();pst.close();}catch(SQLExceptione){thrownewDaoException(e);}finally{conexao.desconectar(connection);}}}
Jonathan_Medeiros
Tenta fazer dessa forma aqui:
Stringsql="select nome,data_avaliacao from avaliacao where nome = ?";PreparedStatementpst=connection.prepareStatement(sql);pst.setString(1," '".concat(nome).concat("' "));
Lucas_Camara
Se vc executar essa query no banco, funciona?
rodriguesabner
Aceita sim, exemplo com concatenação:
publicvoidentrar(){conecta.conexao();try{conecta.executaSQL("SELECT * FROM login WHERE login= '"+(String)camponome.getSelectedItem()+"'");conecta.rs.first();if(conecta.rs.getString("senha").equals(camposenha.getText())){//novo frame}else{//dados invalidos}}catch(SQLExceptionex){JOptionPane.showMessageDialog(null,"Erro: "+ex);}conecta.desconecta();}