[RESOLVIDO]Criar metodo que verifique se ja existe algo igual no BD Postgres
15 respostas
M
mayrontc
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
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.
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
mayrontc
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.
B
bKn
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
mayrontc
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
mayrontc
eu uso int
E
edersonamorim
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
publicvoidactionPerformed(ActionEvente){Patternpattern=Pattern.compile("[0-9]+");Matchermatcher=pattern.matcher(txtNome.getText());if(!matcher.matches()){JOptionPane.showMessageDialog(null,"Só números são aceitos!!");txtNome.requestFocus();}else{BuscaExcluirTelefone.this.dispose();doublevalor=Integer.parseInt(txtNome.getText());try{Cadastrop=newCadastro();p=CadastroDAO.obterClienteID(valor);CadastroDAO.excluirProduto(p);}catch(SQLExceptione2){e2.printStackTrace();}catch(Exceptione2){e2.printStackTrace();}JOptionPane.showMessageDialog(null,"Excluido.");}}
publicstaticvoidexcluirProduto(Cadastrop)throwsSQLException{try{PreparedStatementpstmt=cnn.prepareStatement("DELETE FROM cadastros WHERE id_cadastros = ?");pstmt.setDouble(1,p.getIdCadastro());pstmt.execute();pstmt.close();}catch(SQLExceptione){e.printStackTrace();}}publicstaticCadastroobterClienteID(doublevalor)throwsSQLException,Exception{ConnectionFactorydao=newConnectionFactory();cnn=dao.getConnection();PreparedStatementstmt=cnn.prepareStatement(" SELECT * FROM cadastros WHERE id_cadastros = ?");stmt.setDouble(1,valor);ResultSetrs=stmt.executeQuery();Cadastrocadastro=newCadastro();if(!rs.next())returnnull;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();returncadastro;}