Java vincoli

di il
4 risposte

Java vincoli

Salve ho una tabella "indirizzo" con il vincolo check in SQL su CAP che può essere solo di due lettere ed ho in Java la GUI di registrazione dove ho ciò:
	
	 @Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource().equals(Button_Iscriviti)) {
			
			    validazioni.capObbligatorio(Cap, "Inserisci un CAP", "Il CAP inserito non è valido[5 caratteri]");
			    
     
Dove ho creato una classe "validazione" che contiene:
	
	 public boolean capObbligatorio(String cap, String msgMancante, String msgInvalido) {
        if (cap == null || cap.isEmpty()) {
            messaggiErrore.add(msgMancante);
            return false;
        }

        if (!cap.matches("[0-9]{5}")) {
            messaggiErrore.add(msgInvalido);
            return false;
        }

        return true;
    }  
     
se voglio eliminare l'ultimo metodo e voglio controllarlo da db come dovrò poi scrivere in java?
non so se mi sono spiegata bene ma grazie mille

4 Risposte

  • Re: Java vincoli

    saraciao ha scritto:


    se voglio eliminare l'ultimo metodo e voglio controllarlo da db come dovrò poi scrivere in java?
    Se vuoi replicare la logica di capObbligatorio a livello di DB, devi applicare un CONSTRAINT di check, mettendo anche NOT NULL sulla colonna del CAP.
    Però per sapere cosa va scritto esattamente, devi precisare quale DBMS stai usando. (MySQL? PostgreSQL? ecc...). La maggior parte dei DBMS ha anche il supporto delle regex, quindi si può replicare [0-9]{5} in maniera uguale (o quasi) a Java.

    L'altro aspetto da considerare è che se metti un vincolo così su DB, il problema lo scopri solo quando fai una INSERT (o UPDATE), non prima. E nel caso di vincolo violato, ti becchi sicuramente una eccezione. Quale, dipende dallo strato di accesso al DB che stai usando (JDBC puro? Spring JdbcTemplate? ecc...).
  • Re: Java vincoli

    andbin ha scritto:


    saraciao ha scritto:


    se voglio eliminare l'ultimo metodo e voglio controllarlo da db come dovrò poi scrivere in java?
    Se vuoi replicare la logica di capObbligatorio a livello di DB, devi applicare un CONSTRAINT di check, mettendo anche NOT NULL sulla colonna del CAP.
    Però per sapere cosa va scritto esattamente, devi precisare quale DBMS stai usando. (MySQL? PostgreSQL? ecc...). La maggior parte dei DBMS ha anche il supporto delle regex, quindi si può replicare [0-9]{5} in maniera uguale (o quasi) a Java.

    L'altro aspetto da considerare è che se metti un vincolo così su DB, il problema lo scopri solo quando fai una INSERT (o UPDATE), non prima. E nel caso di vincolo violato, ti becchi sicuramente una eccezione. Quale, dipende dallo strato di accesso al DB che stai usando (JDBC puro? Spring JdbcTemplate? ecc...).
    Ciao, grazie per avermi risposto, uso pgAdmin è il vincolo lo scrivo cosi
    
    ALTER TABLE Indirizzo
      ADD CONSTRAINT utente_cap CHECK (CAP ~* '^ [0-9]{5}+$');
    
    e in tal modo ho aggiunto i vari vincoli ma il problema è che poi poiché in java non so come fare in modo che se l'utente nella GUI di iscrizione inserisce un cap di 7 numero si ha una dialog d'errore con il messaggio "cap errato". Ho un controller in cui ho tale dialog d'errore:
    
                  public void VisualizzazioneAvvisi(List<String> messaggiErrore) {
    		    if (dialogErrore == null) {
    		        dialogErrore = new VisualizzazioneAvvisi(this);    
    		        dialogErrore.setBounds(0, 0,360, 150);
    		        dialogErrore.setLocationRelativeTo(menu);
    		    }
    
    		    dialogErrore.setMessaggiErrore(messaggiErrore);
    		    dialogErrore.setVisible(true);
    		}
    
    Ma come faccio a far ciò in tale metodo della Gui di registrazione
    	
    	 @Override
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource().equals(Button_Iscriviti)) {
    				String nome=textField_Nome.getText();
    				String cognome=textField_Cognome.getText();
    				String email=textField_Email.getText();
    				String numeroTelefonico=textField_NumTelefonico.getText();
    				String password=textField_Password.getText();
    				String provincia=textField_Provincia.getText();
    				String citta=textField_Città.getText();
    				String Cap=textField_Cap.getText();
    				String nomeVia=textField_NomeVia.getText();
    				int numCivico = 0;
    				
    			    Validazioni validazioni = new Validazioni();
    			    validazioni.emailObbligatoria(email, "Inserisci una email", "La email inserita non è valida");
    			    validazioni.provinciaObbligatoria(provincia, "Inserisci una provincia", "La provincia inserita non è valida[2 caratteri]");
    			    validazioni.capObbligatorio(Cap, "Inserisci un CAP", "Il CAP inserito non è valido[5 caratteri]");
    			    validazioni.numeroCivicoObbligatorio(Integer.toString(numCivico), "Inserisci il numero civico", "Il numero Civico inserita non è valida[Inserire solo valori numerici]");
    			    validazioni.nomeViaObbligatoria(nomeVia, "Inserisci una via", "La via inserita non è valida");
    			    validazioni.cittaObbligatoria(citta, "Inserisci una citta", "La citta inserita non è valida");
    			    validazioni.passwordObbligatoria(password, "Inserisci una password", "La password inserita non è valida[Almeno una lettera maiuscola,Almeno una lettera minuscola,Almeno una cifra,Almeno un carattere speciale,Lunghezza minima 8]");
    			    validazioni.numeroTelefonicoObbligatoria(numeroTelefonico, "Inserisci un numero di telefono", "Il numero di telefono inserito non è valido[8 valori]");
    			    validazioni.nomeObbligatoria(nome, "Inserisci un nome", "Il nome inserito non è valido");
    			    validazioni.cognomeObbligatoria(cognome, "Inserisci un cognome", "Il cognome inserito non è valido");
    
    			    if (validazioni.valido()) {
    			    	numCivico=Integer.parseInt(textField_N_Civico.getText().toString());
    			    	ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia);
    			    	if(ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia)==false) {
    					     ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente è stato registrato con successo"));
    				    }  else {
    					     ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente già presente"));
    				    	  ctrl.visualizzazioneLogin();
    				     }
    			    }
    			    else {
    			    	 ctrl.VisualizzazioneAvvisi(validazioni.getMessaggiErrore());
    
    			    }
         
    ?
    Grazie mille
  • Re: Java vincoli

    saraciao ha scritto:


    andbin ha scritto:


    saraciao ha scritto:


    se voglio eliminare l'ultimo metodo e voglio controllarlo da db come dovrò poi scrivere in java?
    Se vuoi replicare la logica di capObbligatorio a livello di DB, devi applicare un CONSTRAINT di check, mettendo anche NOT NULL sulla colonna del CAP.
    Però per sapere cosa va scritto esattamente, devi precisare quale DBMS stai usando. (MySQL? PostgreSQL? ecc...). La maggior parte dei DBMS ha anche il supporto delle regex, quindi si può replicare [0-9]{5} in maniera uguale (o quasi) a Java.

    L'altro aspetto da considerare è che se metti un vincolo così su DB, il problema lo scopri solo quando fai una INSERT (o UPDATE), non prima. E nel caso di vincolo violato, ti becchi sicuramente una eccezione. Quale, dipende dallo strato di accesso al DB che stai usando (JDBC puro? Spring JdbcTemplate? ecc...).
    Ciao, grazie per avermi risposto, uso pgAdmin i vincolo so come scriverli il problema è che prima gestivo i vari vincoli creando il metodo di controllo con le varie espressioni regolari e facevo in tal modo:
    	
    	 @Override
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource().equals(Button_Iscriviti)) {
    				String nome=textField_Nome.getText();
    				String cognome=textField_Cognome.getText();
    				String email=textField_Email.getText();
    				String numeroTelefonico=textField_NumTelefonico.getText();
    				String password=textField_Password.getText();
    				String provincia=textField_Provincia.getText();
    				String citta=textField_Città.getText();
    				String Cap=textField_Cap.getText();
    				String nomeVia=textField_NomeVia.getText();
    				int numCivico = 0;
    				
    			    Validazioni validazioni = new Validazioni();
    			    validazioni.emailObbligatoria(email, "Inserisci una email", "La email inserita non è valida");
    			    validazioni.provinciaObbligatoria(provincia, "Inserisci una provincia", "La provincia inserita non è valida[2 caratteri]");
    			    validazioni.capObbligatorio(Cap, "Inserisci un CAP", "Il CAP inserito non è valido[5 caratteri]");
    			    validazioni.numeroCivicoObbligatorio(Integer.toString(numCivico), "Inserisci il numero civico", "Il numero Civico inserita non è valida[Inserire solo valori numerici]");
    			    validazioni.nomeViaObbligatoria(nomeVia, "Inserisci una via", "La via inserita non è valida");
    			    validazioni.cittaObbligatoria(citta, "Inserisci una citta", "La citta inserita non è valida");
    			    validazioni.passwordObbligatoria(password, "Inserisci una password", "La password inserita non è valida[Almeno una lettera maiuscola,Almeno una lettera minuscola,Almeno una cifra,Almeno un carattere speciale,Lunghezza minima 8]");
    			    validazioni.numeroTelefonicoObbligatoria(numeroTelefonico, "Inserisci un numero di telefono", "Il numero di telefono inserito non è valido[8 valori]");
    			    validazioni.nomeObbligatoria(nome, "Inserisci un nome", "Il nome inserito non è valido");
    			    validazioni.cognomeObbligatoria(cognome, "Inserisci un cognome", "Il cognome inserito non è valido");
    
    			    if (validazioni.valido()) {
    			    	numCivico=Integer.parseInt(textField_N_Civico.getText().toString());
    			    	ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia);
    			    	if(ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia)==false) {
    					     ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente è stato registrato con successo"));
    				    }  else {
    					     ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente già presente"));
    				    	  ctrl.visualizzazioneLogin();
    				     }
    			    }
    			    else {
    			    	 ctrl.VisualizzazioneAvvisi(validazioni.getMessaggiErrore());
    
    			    }
         
    ora vorrei invece fare che dopo che l'utente clicca il bottone di registrazione viene controllato che non si violino i check nel database e nel caso di errore si ha una dialog, e non da console, con il messaggio "errore di scrittura dei campi, utente non registrato". Come posso fare?
  • Re: Java vincoli

    andbin ha scritto:


    saraciao ha scritto:


    se voglio eliminare l'ultimo metodo e voglio controllarlo da db come dovrò poi scrivere in java?
    Se vuoi replicare la logica di capObbligatorio a livello di DB, devi applicare un CONSTRAINT di check, mettendo anche NOT NULL sulla colonna del CAP.
    Però per sapere cosa va scritto esattamente, devi precisare quale DBMS stai usando. (MySQL? PostgreSQL? ecc...). La maggior parte dei DBMS ha anche il supporto delle regex, quindi si può replicare [0-9]{5} in maniera uguale (o quasi) a Java.

    L'altro aspetto da considerare è che se metti un vincolo così su DB, il problema lo scopri solo quando fai una INSERT (o UPDATE), non prima. E nel caso di vincolo violato, ti becchi sicuramente una eccezione. Quale, dipende dallo strato di accesso al DB che stai usando (JDBC puro? Spring JdbcTemplate? ecc...).
    Potrei fare cosi:
    
    	 
    	 @Override 
    		public void actionPerformed(ActionEvent e) {    
    			if(e.getSource().equals(Button_Iscriviti)) {
    				String nome=textField_Nome.getText();
    				String cognome=textField_Cognome.getText();
    				String email=textField_Email.getText();
    				String numeroTelefonico=textField_NumTelefonico.getText();
    				String password=textField_Password.getText();
    				String provincia=textField_Provincia.getText();
    				String citta=textField_Città.getText();
    				String Cap=textField_Cap.getText();
    				String nomeVia=textField_NomeVia.getText();
    				int numCivico = 0;
    				
    			    	if(ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia)==false) {
    					     ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente è stato registrato con successo"));
    				    }  else {
    					     ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente già presente"));
    				    	  ctrl.visualizzazioneLogin();
    				     }
    			    }	
    
    ma poi se ad esempio l'utente non inserisce il nome la registrazione non viene fatta ma da console mi da errore invece sulla Gui viene mostrato errore con il messaggio "Utente è stato registrato con successo", come posso risolvere facendo in modo che se il controllo fallisce esce su dialog d'errore registrazione non effettuata", se invece i controlli sono rispettati invece ho il messaggio di "registrazione effettuata"?
Devi accedere o registrarti per scrivere nel forum
4 risposte