Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Base de données Java

String avec tirets

    16 mai 2019 à 14:06:38

    Bonjour à tous, je me demandais s'il était possible de découper un string en partant de la droite de celle-ci.

    En effet, je me retrouve avec de 2 base de données (les 2 bases ont le même nom). Dans ma première base (que je ne peux pas modifié), j'ai une table Professeur qui possède une colonne qui se nomme nom_prenom_matiere_vacataire et qui regroupe plusieurs infos.

    Exemple :

    01_Bertrand-Leeroy-Externe-Math(Vacataire)

    02_Jean-pierre-Axel-Interne-Anglais(Titulaire)

    Il m'a donc été demandé de créer une seconde base contenant les même tables dont Professeur. 

    Cette table doit posséder les même infos mais sur plusieurs colonnes c'est-à-dire :

    Exemple :

    Au lieu de nom_prenom_matière_vacataire, on obtient nom   prenom   matiere   regime   vacataire



    Mon problème est que je ne parviens pas à découper toutes ces string en fonction des tirets sachant que certains nom possède un tiret

    Exemple :


    02_Jean-pierre-Axel-Interne-Anglais(Titulaire)

    Colonne :

    nom = 02_Jean-pierre  prenom = Axel    matiere = Anglais   regime = Interne   vacataire = NULL


    Voici mon code qui permet le transfert de la BDD1 à la 2, puis mon découpage qui découpe les string en commençant par la gauche (le problème c'est cela ne fonctionne que pour les string ou le nom ne possède pas de tirets, j'en est donc conclu qu'il fallait plutôt découper les string en commençant par la droite)


    Voici mon Code :

    public class Professeur{
    
        public Professeur() {
    		
    	}
    	
    	public void gestProfesseur() throws SQLException, IOException, FileNotFoundException {
    		
    		Connection con = Connector_IGPV2_full.getInstance().getCon();
    		Connection con2 = Connector_IGPV2_2.getInstance().getCon();
    		
    		ResultSet rs = con.prepareStatement("SELECT nom_prenom_matière_vacataire Professeur_v2_1.professeur").executeQuery();
    		
    		PreparedStatement ps = con2.prepareStatement("INSERT INTO professeur(nom, prenom, matière, regime, "
    		+ "vacataire) values (?,?,?,?,?)");
    
    		while(rs.next()) {
    			
    			String[] nom = cutNom(rs.getString("nom_prenom_matière_vacataire"));
    
    			if (nom[0] == null)
    				continue;
    
    			ps.setString(1, nom[0]);
    			ps.setString(2, nom[1]);
    			ps.setString(3, nom[3]);
    			ps.setString(4, nom[2]);
    			ps.setString(5, nom[4]);
    
    			con2.prepareStatement("UPDATE Professeur set vacataire = 'NULL' WHERE vacataire != 'Vacataire'").executeUpdate();
    
    			ps.executeUpdate();
    		}
    		rs.close();
    		ps.close();
    		con.close();
    		con2.close();
    	}
    
    	/**
    	 * Découpe le champ nom_prenom_matière_vacataire
    	 * @param nom
    	 * @return String[]  0 = nom / 1 = prenom / 3 = matiere / 2 = regime / 4 = vacataire
    	 */
    	private String[] cutNom(String nom) {
    		String[] finalSplit = new String[6];
    		if (nom != null && !nom.equals("NULL") && nom.length() > 10) {
    
    			String temp1 = nom.substring(0, nom.indexOf("-"));
    			nom = temp1.replaceAll("\\s", "_") + " " + nom.substring(nom.indexOf("-")+1);
    			nom = nom.replaceAll("\\-", " ");
    			nom = nom.replaceAll("\\(", " ");
    			nom = nom.replaceAll("\\)", " ");
    			nom = nom.replaceAll("\\s", "\\|");
    			String[] rawSplit = nom.split("\\|");
    
    
    			finalSplit = new String[5];
    			
    			finalSplit[0] = rawSplit[0];
    			finalSplit[1] = rawSplit[1];
    			finalSplit[2] = rawSplit[2];
    			finalSplit[3] = rawSplit[3];
    			finalSplit[4] = rawSplit[4];
    
    
    		}
    		return finalSplit;
    	}
    
    	public void truncateProfesseur() throws SQLException, IOException, FileNotFoundException {
    		
    		Connection con2 = Connector_IGPV2_2.getInstance().getCon();
    		
    		con2.prepareStatement("TRUNCATE TABLE professeur").executeUpdate();
    		
    		con2.close();
    	}
    }

       

    Cordialement. Smiley biggrin

    -
    Edité par Alistair Daniel 16 mai 2019 à 14:07:48

    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2019 à 14:50:41

      Bonjour,

      Je vois bien ou se situe votre problème, mais si jamais le prénom contenais également un nom composé ? vous serais également bloqué ou même apporterais des erreurs en partant de la droite également.

      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2019 à 19:45:29

        Bonjour,

        Et donc ce sujet n'a pas suffit ? 

        https://openclassrooms.com/forum/sujet/probleme-pour-decouper-un-string?page=1#message-93159207

        -
        Edité par jule04 16 mai 2019 à 19:45:52

        • Partager sur Facebook
        • Partager sur Twitter

        Site personnel : Julien Gidel - AutoMatePHPresentation

          16 mai 2019 à 19:50:41

          Je pense surtout que ton plus gros problème sera de pouvoir différencier les prénom composé ou le nom composé les deux étant possible.
          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2019 à 10:06:32

            Bonjour à tous, j'aimerais juste savoir si vous pouviez m'expliquer comment découper un string en commençant par la droite.

            Découpe par la gauche :

                        String temp1 = nom.substring(0, nom.indexOf("-"));
                        nom = temp1.replaceAll("\\s", "_") + " " + nom.substring(nom.indexOf("-")+1);
                        nom = nom.replaceAll("\\-", " ");
                        nom = nom.replaceAll("\\(", " ");
                        nom = nom.replaceAll("\\)", " ");
                        nom = nom.replaceAll("\\s", "\\|");
                        String[] rawSplit = nom.split("\\|");

            Il faut également savoir que la colonne nom possède des nom composé (02_Jean-pierre) et seulement cette colonne (pas dans une autre) car il s'agit d'un exemple ne prenant pas en compte les prénom composé.

            Cordialement.

            -
            Edité par Alistair Daniel 22 mai 2019 à 10:12:42

            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2019 à 9:40:52

              Quelqu'un peut-il m'aider svp.
              • Partager sur Facebook
              • Partager sur Twitter
                28 mai 2019 à 10:19:03

                J'avais pensé a une solution un peu chiant qui consistais a écrire dans une String lettre par lettre en commençant de la fin et après retourné la String...

                mais en voulant te coder se petit truc j'ai trouver un meilleur solution, en plus je t'ai déjà écrit cette petite fonction, tu n'a plus qu'a la comprendre et l'adapter ^^.

                public static ArrayList<String> fonction (String entrer){
                	ArrayList<String> lst = new ArrayList<String> ();
                		
                	for(int i = 0; i < 3;i++) { //ta boucle qui compte le combre de variable
                		for(int j = entrer.length()-1; j > 0; j--) { //boucle qui commence par la fin de ta String
                				
                			if(entrer.substring(j,j+1).charAt(0) == '-') {
                				lst.add(entrer.substring(j+1)); //on ajoute a la liste
                				entrer = entrer.substring(0,j); // et supprime de la variable
                				break; //on casse la boucle pour effectuer le décompte
                			}
                		}
                	}
                	lst.add(entrer.substring(0)); //on ajoute la dernière, le nom qui soit composé ou non
                	return lst;
                }

                Voilà ^^, donc juste la liste te retournera tes information dans l'autre sens : Anglais(Titulaire), Interne, Axel, 02_Jean-pierre

                je n'ai pas coder la partie pour récupérer se qui a entre parenthèse, je pense que tu devrai y arrivé, sinon reviens me voir.

                Alors, pour faire court, on part d'une boucle qui va parcourir seulement les 3 mot en partant de la fin, a l’intérieur de cette boucle se trouve une autre boucle qui parcours en partant de la fin la variable passer en paramètre jusqu’à tomber sur un "-", et a se moment la il va ajouter a la liste tout se qui a après se tiret, puis il le supprime afin de ne pas retomber dessus, et je casse la boucle afin de faire l'incrémentation de la boucle d'avant. A la fin il ne reste plus qu'a ajouter se qui reste c'est a dire le nom qu'il soit composé ou non.

                Voilà, j’espère que mes explication n'on pas été trop confuse, tu peux toujours remplacer ArrayList par une liste normal.

                • Partager sur Facebook
                • Partager sur Twitter

                Problème Base de données Java

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown