Verificar cadastro do Veiculo antes de inserir uma Ocorrencia

11 respostas
S

Queria saber como posso fazer uma validação, quando ao inserir uma Ocorrencia ele verificar se o cpf do cliente esta cadastrado na tabela Cliente.

Estou usando swing

Teria que passar uma parametro... EX: no DAO seria... o meu metodo inserir :
public boolean inserir (DomainObject domainOBject) throws RemoteException

//para validar
public boolean validacpf (String parametro) throws RemoteException// "estou usando rmi"

Como eu poderia fazer no meu pacote controle para chamar os 2 metodos, fazer a verificação e dps la na visão exibir se o cpf não foi cadastrado... e se for cadastrado ele insere normal.

11 Respostas

Fernando_Generoso_da

Dispare uma exceção e propague ela pelas camadas até a interface gráfica caso o cpf não seja válido…

S

no metodo do validação, no DAO, eu fiz a pesquisa passando por parametro a placa digitada… se ele não localizar a placa na consulta ele cai na exceção…

mais na hora de validar ele executa o try normal…

renamed

Pq vc nao altera o BD para que o cpf seja um índice único, sem direito a duplicação?

Cerque seu código com try catch e vc captura sempre que o cara quiser inserir um cpf que já exista.

S
estava tentando fazer assim: meu controle:
public boolean ValidaCampo(String parametro) throws RemoteException, SQLException{
   
    IDAO dao = new DaoOcorrencia();
    JOptionPane.showMessageDialog(null, "antes do lokk");
        try {
            Naming.lookup("rmi://localhost/ocorrencia");


            JOptionPane.showMessageDialog(null, "dps do do look");
    if(dao.ValidaCampo(parametro)){
        return true;}
    else{
  
    return false;}}
     catch(Exception e){}
    return true;
    }

dao:

public boolean ValidaCampo(String parametro) throws RemoteException, SQLException{
    
    try {

    Connection conn = Conexao.getConnection();

    String sql = null;
    // sql = "select descricao,data_ocorrencia,servico,placa,nomecliente,nomeveiculo from ocorrencia where idocorrencia=? ";
    sql = "select placaveiculo from veiculo where placaveiculo =?";





    PreparedStatement pst = conn.prepareStatement(sql);
    pst.setString(1,parametro);
    ResultSet rs = pst.executeQuery();}




    catch (Exception erro){
    return false;
    }
    return true;
    }

view:

if (fachadaoco.ValidaCampo(tfplaca.getText())){

           // fachadaoco.inserir(ocorrencia);
                JOptionPane.showMessageDialog(null, "ok salvo");

            } else {
                JOptionPane.showMessageDialog(null, "erro");
            }





        } catch (Exception error) {
            error.printStackTrace();
            JOptionPane.showMessageDialog(null, error.getMessage());
        }
    }

ele exibe a mensagem salvo... msm não tendo a placa cadastrada na tabela veiculo

RenataFA

No seu código abaixo, corrija de acordo com as dicas.

public boolean ValidaCampo(String parametro) throws RemoteException, SQLException{
    
    try {

    Connection conn = Conexao.getConnection();

    String sql = null;
    // sql = "select descricao,data_ocorrencia,servico,placa,nomecliente,nomeveiculo from ocorrencia where idocorrencia=? ";
    sql = "select placaveiculo from veiculo where placaveiculo =?";

    PreparedStatement pst = conn.prepareStatement(sql);
    pst.setString(1,parametro);
    ResultSet rs = pst.executeQuery();}




    catch (Exception erro){
    return false;
    }
    return true;
    }

Dicas:

1) Aprenda uma coisa: try...catch serve pra capturar ERROS. Não existir a tal placa no BD não é um erro! Apenas não existe e pronto. Sendo assim, depois da linha ResultSet rs = pst.executeQuery();, faça um tratamento verificando se o ResultSet está vazio e então retorne o que deseja na sua validação.

2) O catch serve pra tratar erros, dentro dele vc pode colocar algum retorno, mas é importante que vc coloque uma msg de erro, vc tem que saber que algo deu errado. Gravar o erro, imprimir no console, alguma coisa, colocar try...catch e não fazer nenhum tratamento é pior do que não colocar, pq vc acaba "escondendo" um erro.

OBS: Já conversamos por MSN, mas achei justo com os demais do GUJ postar aqui qual era seu real problema, para ajudar os demais.

S

Pessoal consegui resolver graças a Renata, nossa colega do GUJ…
So fiz uma verificação no resultset…

obrigado…

J
//recomedações dizem para usar nome de metodo = verbo.
public boolean validarCampo(String parametro) throws RemoteException, SQLException{  
          
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

boolean isCampoValido = false;

try 
{  
      
       conn= Conexao.getConnection();  
      
       StringBuilder sql = new StringBuilder("select ");
       sql.append("CD_OCORRENCIA ");
       sql.append("from OCORRENCIA ");
       sql.append("where CD_OCORRENCIA = ?");
  
       pstmt = conn.prepareStatement(sql.toString());  
       pstmt.setString(1,parametro);  
       rs = pstmt.executeQuery();}  
 
       //caso entre significa que algum registro foi encontrado
       if(rs.next())
       {
             isCampoValido = true;
       }
   
       return isCampoValido;
}
catch (Exception erro)
{
    //caso haver forte concorrencia no seu banco de dados use o autocommit = false da conexão, e também para não
    // entupir de transações não finalizadas no banco.
    if(conn != null)
    {
         conn.rollback();
    }


    throw erro;
}
finally
{
      //use uma classe do tipo UtilConexao.fecharConexoes() para não fazer esse mesmo procedimento em todos os DAO.
      if(pstmt != null)
      {
           pstmt.close();
      }

      if(rs != null)
      {
            rs.close();
       }

       if(conn != null)
       {
            conn.close();
       }
}
Fernando_Generoso_da

Outra opção é criar uma exeção e fazer:

if(!validaCpef()){
   throw new CpfInvalidoException("mensagem");
}
J

É uma possibilidade, mais exceções são para erros eu acredito, o CPF não estar cadastrado na base de dados não é um erro.

Otimo dia.

J
if(rs.next())   
       {   
             isCampoValido = true;   
       }

huuum feio né…

que tal

isCampoValido = rs.next();

e tira aquele return do meio do try

J

Assim fica bom, mais pq tirar o return no meio do try ?

se colocar ele no finally a exception não sobe nunca …

Criado 9 de novembro de 2009
Ultima resposta 10 de nov. de 2009
Respostas 11
Participantes 6