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?
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 = '?'
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);
}
}
}
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("' "));
Se vc executar essa query no banco, funciona?
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();
}
}
Dessa forma não funcionou @Jonathan_Medeiros, , continuou com o mesmo erro, mais alguma idéia?
Funcionou sim @Lucas_Camara,
SELECT nome, data_avaliacao FROM avaliacao WHERE nome = ' " + nome + " '
você testou assim?
Funcionou @JFSantos-RJ , MUITO OBRIGADO.
Cara, só por curiosidade, tu já tentou trocar de = para Like?
O detalhe do @JFSantos-RJ funcionou @Jonathan_Medeiros, muito obrigado a todos.
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.