Não estou conseguindo fazer o Método listar com condição where

12 respostas Resolvido
java
A

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.

public ArrayList<Avaliacao> listaAvaliacao(String nome) throws DaoException, ConexaoException {
        Connection connection = conexao.conectar();
        String sql = "select nome,data_avaliacao  from avaliacao where nome = ?";
        try {
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.setString(1, nome);
            ResultSet rs = pst.executeQuery(sql);
            ArrayList<Avaliacao> lista = new ArrayList();
            Avaliacao avaliacao;
            
            
            while(rs.next()){
                avaliacao = new Avaliacao();
                avaliacao.setNome(rs.getString("nome"));
                avaliacao.setDataAvaliacao(rs.getString("data_avaliacao"));
                lista.add(avaliacao);
            }
            return lista;
        } catch (SQLException e) {
            throw new DaoException(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.

Alguém consegue me ajudar?

12 Respostas

rodriguesabner

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

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:

public List<Avaliacao> listaAvaliacao(String nome) throws DaoException, ConexaoException {
        Connection connection = conexao.conectar();
        String sql = "SELECT nome, data_avaliacao  FROM avaliacao WHERE nome= ?";
        try {
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.setString(1, nome);

            ResultSet rs = pst.executeQuery();
            
            List<Avaliacao> lista = new ArrayList<>();
            Avaliacao avaliacao = null;
            
            
            while(rs.next()){
                avaliacao = new Avaliacao();
                avaliacao.setNome(rs.getString("nome"));
                avaliacao.setDataAvaliacao(rs.getString("data_avaliacao"));
                lista.add(avaliacao);
            }
            return lista;
         rs.close();
        pst.close();
        } catch (SQLException e) {
            throw new DaoException(e);
        	}finally{
           		 conexao.desconectar(connection);
        }
    }
}
Jonathan_Medeiros

Tenta fazer dessa forma aqui:

String sql = "select nome,data_avaliacao  from avaliacao where nome = ?";

PreparedStatement pst = 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:

public void entrar() {
        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 (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro: " + ex);
        }
        conecta.desconecta();
    }

Meu executeQuery fica na classe de conexão:

public void executaSQL(String sql) {
    try {
        stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        rs = stm.executeQuery(sql);
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}
A

Dessa forma não funcionou @Jonathan_Medeiros, , continuou com o mesmo erro, mais alguma idéia?

A

Funcionou sim @Lucas_Camara,

rodriguesabner

SELECT nome, data_avaliacao FROM avaliacao WHERE nome = ' " + nome + " '

você testou assim?

A

Funcionou @JFSantos-RJ , MUITO OBRIGADO.

Jonathan_Medeiros

Cara, só por curiosidade, tu já tentou trocar de = para Like?

A

O detalhe do @JFSantos-RJ funcionou @Jonathan_Medeiros, muito obrigado a todos.

Jonathan_Medeiros

Vi só agora que tu tava passando a string SQL como parâmetro para o método executeQuery, provavelmente por isso ocorria o erro de sintaxe.

Criado 12 de abril de 2019
Ultima resposta 14 de abr. de 2019
Respostas 12
Participantes 5