Método verifica se ja existe

Criei um método para verificar se a placa digitada ja existe no banco de dados, mas não está retornando o booleano corretamente onde está o erro. Segue os códigos

public boolean verificaPlaca(String placa) throws Exception{ boolean existe = true; Connection con = Conexao.obterCon(); PreparedStatement psmt = con.prepareStatement("SELECT placa FROM veiculo WHERE placa LIKE ?"); psmt.setString(1, placa); ResultSet rs = psmt.executeQuery(); while (rs.next()) { if ((rs.getString("placa") == null)){ existe = false; }else{ existe = true; } } con.close(); return existe; }
Esse é o código do botão do JFrame onde passo a placa como parametro

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { DAOSinistro ds = new DAOSinistro(); try { if (ds.verificaPlaca(jFormattedTextField1.getText())== true){ JOptionPane.showMessageDialog(null, "Existe"); }else{ JOptionPane.showMessageDialog(null, "Não existe"); } } catch (Exception ex) { Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); } }

coloca ae

psmt.setString(1, "%"+placa+"%");   

Coloquei, não adiantou mas já ta passando certo o parametro dei um System.out.println.

Só para simplificar:

 existe = rs.getString("placa") != null; 

Valeu, deu certo.

Tem alguns problemas no seu código:

  • Se você quer achar exatamente uma placa, não use LIKE use =

  • Se a placa não existir, ele não chega nem a entrar no while, pois de primeira o next() vai retornar false.

  • Se ele retornar algum registro para a placa, não precisa testar se é nulo, pois o campo placa vai ser igual o valor do where.

Pode simplificar para isso:

  ResultSet rs = psmt.executeQuery();
  bool existe = rs.next();
  con.close();
  return existe;

Outra coisa, não é algo legal você ficar abrindo/fechando a conexão a cada método.
Uma exception aí deixaria conexões abertas, por exemplo.

[quote=AbelBueno]Tem alguns problemas no seu código:

  • Se você quer achar exatamente uma placa, não use LIKE use =

  • Se a placa não existir, ele não chega nem a entrar no while, pois de primeira o next() vai retornar false.

  • Se ele retornar algum registro para a placa, não precisa testar se é nulo, pois o campo placa vai ser igual o valor do where.

Pode simplificar para isso:

  ResultSet rs = psmt.executeQuery();
  bool existe = rs.next();
  con.close();
  return existe;

Outra coisa, não é algo legal você ficar abrindo/fechando a conexão a cada método.
Uma exception aí deixaria conexões abertas, por exemplo.[/quote]

realmente.
faz um try catch finaly e coloca con.close() no finaly