[RESOLVIDO]Criar metodo que verifique se ja existe algo igual no BD Postgres

Oi!
Fiz um sistema de cadastros de telefones, estou tratando agora de como excluir, cada contado tem um ID até ai tudo bem, mas quando eu procuro um cadastro q não existe ele procura e da o erro, queria saber como que faço pra criar uma condição pra ver se esse ID existe no BD, se não existir retorne alguma mensagem! Obrigado

uso Postgres SQL

Como assim ele ‘da o erro’? Se você postasse o erro, facilitaria.

Sempre que você faz uma busca que não retorna valores no banco, ele simplesmente retorna nada, ao invés de dar erro. Se está dando erro, é de sintaxe na busca.

Isso que acontece

java.lang.NullPointerException
at dao.implementes.CadastroDAO.excluirProduto(CadastroDAO.java:180)
at pagers.CadastroDeTelefones.BuscaExcluirTelefone$2.actionPerformed(BuscaExcluirTelefone.java:105)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Poste por favor o código que executa para que ocorra esse erro, a query.

[code]public static void excluirProduto(Cadastro p) throws SQLException{
try {
PreparedStatement pstmt = cnn.prepareStatement(“DELETE FROM cadastros WHERE id_cadastros = ?”);

		pstmt.setDouble(1, p.getIdCadastro()); 
		pstmt.execute();
		pstmt.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}
}[/code]

Essa exceção ocorre toda vez que vc tenta acessar algo apartir de algo null, isto é:

  public static void excluirProduto(Cadastro p) throws SQLException{  
          try {  
              PreparedStatement pstmt = cnn.prepareStatement("DELETE FROM cadastros WHERE id_cadastros = ?");  
                
              pstmt.setDouble(1, p.getIdCadastro());   // Pode estar chegando null aki == p.getIdCadastro()
              pstmt.execute();  
              pstmt.close();  
          } catch (SQLException e) {  
              e.printStackTrace();  
          }  
      }  

O ideal seria vc dar um

Se printar null nesse sysout a exceção é exatamente isso que acabei de descrever

Eu acho q ele não chega null ali. Pois sempre algum valor é digitado:

exemplo

tenhu no meu BD ids de 1 a 10,

mais se eu passo por exemplo 15

ele naum encontra valor nenhum pois naum existe ele e da o erro

O interessante seria vc executar esse teste, pois eu acredito ser a provável causa.

:slight_smile:

já ouviu falar de if?

if (p.getIdCadastro() != null) {
    try {
...

Quando você tenta excluir um registro no banco que não existe, a exceção é outra, e não NullPointerException.

Mas o p.getIdCadastro() é um inteiro, não compara com null

se idCadastro for int não aceita null só numeros inteiros ,mas se for Integer pode ser null não sei qual o seu caso ai no momento.

Mas o obj p pode ser null e com certeza dará essa exceção se ele estiver chegando ai null.

eu uso int

Verifica se p não é null

if (p != null)

vc disse que seu banco vai de 1 a 10 e vc tenta excluir algum objeto com id 15

só que vc está passando o objeto como referência para o metodo excluir e não o id.

minha dúvida é: como você está conseguindo recuperar um objeto com este id??? provavelmente vc não conseguiu e está tentando excluir algo que não existe, então p == null

Minhas Classes

[code]public class Cadastro {
private double idCadastro;

public double getIdCadastro() {
	return idCadastro;
}
public void setIdCadastro(double idCadastro) {
	this.idCadastro = idCadastro;
}[/code]

[code]public void actionPerformed(ActionEvent e) {
Pattern pattern = Pattern.compile("[0-9]+");
Matcher matcher = pattern.matcher(txtNome.getText());
if (!matcher.matches()) {
JOptionPane.showMessageDialog(null, “Só números são aceitos!!”);
txtNome.requestFocus();
}else{
BuscaExcluirTelefone.this.dispose();
double valor =Integer.parseInt(txtNome.getText());
try {
Cadastro p = new Cadastro();

					p = CadastroDAO.obterClienteID(valor);
					CadastroDAO.excluirProduto(p);
				} catch (SQLException e2) {
					e2.printStackTrace();
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, "Excluido.");
			}
		}[/code]

[code] public static void excluirProduto(Cadastro p) throws SQLException{
try {
PreparedStatement pstmt = cnn.prepareStatement(“DELETE FROM cadastros WHERE id_cadastros = ?”);

		pstmt.setDouble(1, p.getIdCadastro()); 
		pstmt.execute();
		pstmt.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}
}
public static Cadastro obterClienteID( double valor) throws SQLException, Exception {
	ConnectionFactory dao = new ConnectionFactory();
	cnn = dao.getConnection();

	PreparedStatement stmt = cnn
	.prepareStatement(" SELECT * FROM cadastros WHERE id_cadastros = ?");
	stmt.setDouble(1, valor);

	ResultSet rs = stmt.executeQuery();
	Cadastro cadastro = new Cadastro();
			
	if (!rs.next())
		return null;
			
	cadastro.setIdCadastro(rs.getDouble("id_cadastros"));
	cadastro.setNome(rs.getString("nome_cadastros"));
	cadastro.setTelefoneResedencial(rs.getString("numero_res"));
	cadastro.setTelefoneCelular(rs.getString("numero_cel"));
	
	rs.close();
	stmt.close();
	
	return cadastro;
}[/code]
ResultSet rs = stmt.executeQuery();  
Cadastro cadastro = new Cadastro();  
               
     if (!rs.next())  
         return null;

se vc passar um id que não existe, ele não vai obter nenhum resultado do banco de dados e vai retornar null

vc tem que testar se trouxe alguma coisa antes de excluir

Cadastro p =  CadastroDAO.obterClienteID(valor);  
if (p != null){
     CadastroDAO.excluirProduto(p); 
} 

Muito obrigado pela dica, funcionou como eu queria!!