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

15 respostas
M

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

15 Respostas

B

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.

M

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)
JavaMania

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

M
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();
		}
	}
JavaMania

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

M

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

JavaMania

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

:slight_smile:

B

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.

M

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

JavaMania

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.

M

eu uso int

E

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

M

Minhas Classes

public class Cadastro {
	private double idCadastro;
		
	public double getIdCadastro() {
		return idCadastro;
	}
	public void setIdCadastro(double idCadastro) {
		this.idCadastro = idCadastro;
	}

-----------------------------

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.");
				}
			}

----------------------------------------------------

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;
	}
E
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); 
}
M

Muito obrigado pela dica, funcionou como eu queria!!

Criado 1 de julho de 2009
Ultima resposta 2 de jul. de 2009
Respostas 15
Participantes 4