Controler saisie dans JTextfield

Caroline -  
sandul Messages postés 4013 Statut Membre -
Bonjour,je dispose des informations dans un fichier que j'ai ouvert en mode ajout. Cependant je veux éviter la redondance de certaines infos.
Je cherche alors une fonction qui va récupérer la donnée de mon JTextField pour pour la comparer aux données déjà dans mon fichier et me me retourner un message au cas où cette donné existe et l'enregistrer sinon.
Merci de m'indiquer une piste
Configuration: Windows XP
Firefox 3.5.3

13 réponses

  1. sandul Messages postés 4013 Statut Membre 723
     
    Si ton fichier n'est pas trop grand, tu pourrais, e.g., le stocker en mémoire dans une variable String. Et par la suite chercher tout bonnement si le contenu de ton JTextField apparaît quelque part dans ce string (ce qui revient à vérifier vérifier si indexOf() retourne ou pas -1).

    Juste une piste, sans optimisation aucune...

    ++
    0
    1. Caroline
       
      Bonjour Sandul, merci pour ta piste même si je ne vois pas trop le chemin.

      Mais tu peux m'indiquer un autre site où je peux télécharger le Connector/ J 5.1.
      On m'a indiquer ce site que voici: https://dev.mysql.com/downloads/connector/j/5.1.html mais franchement je n'arrive pas à télécharger. Quand je clique sur Download la même page me revient toujours et je n'obtiens rien.
      Peut-être que tu peut me donner une autre technique.C'est vraiment important pour moi.
      Merci pour tous...
      0
  2. sandul Messages postés 4013 Statut Membre 723
     
    Ben tu vas ici https://dev.mysql.com/downloads/connector/j/5.1.html et tout en bas de la page tu cliques sur "pick a mirror" sur la ligne "Source and Binaries (zip)". Tu tombes sur une page d'inscription mais tu feras ta vilaine et cliqueras sur "No thanks, just take me to the downloads!" (en bas de la page). Ensuite, choisis n'importe quel site...

    Le chargement de JConnector n'a rien à voir avec ton topic initial xD
    0
    1. Caroline
       
      Bonsoir Sandul, thanks pour le Jconnector.
      Tu as raison le chargement de JConnector n'a rien à voir avec ton topic initial.
      Seulement que je me suis dit que mon fichier est appelé à devenir plus grand avec le temps et je désire me retourner vers base de données. Qu'en penses-tu?

      A propos j'ai des problèmes pour me connecter a ma base de données mysql de easyPhp.
      Pardon, voici mon code; il n'a pas d'erreur. Mais quand je l'exécute j'obtiens ce message:
      java.lang.ClassNotFoundException: com.mysql.jdbc.driver
      Peut-être que j'ai mal configuré des paramètre, com.mysql.jdbc.driver n'est pas dans le bon répertoire...
      en tout cas je ne comprend pas.
      Merci de m'expliquer avec patience car je suis débutante en programmation et ce code même je l'ai obtenu sur indication du forum

      // code //
      public class SeConnecter {
      public static void main(String[] args) {
      // TODO Auto-generated method stub
      try{
      Class.forName("com.mysql.jdbc.driver");
      }
      catch(ClassNotFoundException e){
      System.err.println(e);
      System.exit(-1);
      }

      try{ //Creation d'une connection à la base
      Connection connect = DriverManager.getConnection ( "jdbc:mysql:localhost","","" );

      //une requette simple
      String ma_requette = "select CODE_STAGE, LIB_STAGE from GS_STAGE";

      // Requette en utilisant un statement
      Statement state = connect.createStatement();
      // On recoit
      ResultSet resultat = state.executeQuery(ma_requette);

      // Recuperation et traitement du resultat
      System.out.println("Dans ma relation:");
      while(resultat.next()){
      System.out.println(" |"+ resultat.getString("CODE_STAGE")+" |"+resultat.getString("LIB_STAGE"));

      }
      state.close();
      connect.close();
      }
      0
  3. sandul Messages postés 4013 Statut Membre 723
     
    thanks pour le Jconnector. : Welcome !

    que mon fichier est appelé à devenir plus grand avec le temps et je désire me retourner vers base de données. Qu'en penses-tu?: très bonne idée... Tu es parfaite pour la programmation d'entreprise xD

    java.lang.ClassNotFoundException: com.mysql.jdbc.driver : ben il n'arrive pas à trouver le driver. Tu ne l'as pas mis au bon endroit, pas indiqué le bon classpath ou (si tu programmes depuis un IDE) tu n'as pas correctement configuré ton IDE. Dans quel cas te trouves-tu ? Utilises-tu un IDE ou pas ?
    0
    1. Caroline
       
      Parfaite pour la programmation d'entreprise tu dis, j'aimerais bien mai je ne comprend pas vite la programmation...
      Au fait j'utilise éclipse, comment remédier alors?
      0
  4. sandul Messages postés 4013 Statut Membre 723
     
    Pour Eclipse, tu fais clic droit sur ton projet / Properties / Java Build Path / Add external jars. Tu navigues vers ton jar (je n'ai pas regardé le contenu de ton fichier téléchargé: si c'est un zip, tu dézippes qq part & tu trouveras probablement un dossier "lib" avec un ou plusieurs jar dedans. C'est de ces fichiers qu4eclipse a besoin pour fonctionner correctement dans ton cas)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sandul Messages postés 4013 Statut Membre 723
     
    Non, pas de dossier "lib". Le fichier dont tu as besoin s'appelle "mysql-connector-java-5.1.10-bin.jar" et est situé à la racine du fichier zip.
    0
    1. Caroline
       
      merci Sandul, mais j'ai eu chaud...En tout cas l'erreur ne se produit plus.
      Mais dit cette ligne est correct hein:
      Connection connect = DriverManager.getConnection ( "jdbc:mysql:localhost","","" );

      En fait je parcourais le livre " Apprendre JAVA et C++ en parallèle" et on disait d'ajouter au driver l'adresse IP du serveur,ainsi que le numéro de port.
      0
  7. sandul Messages postés 4013 Statut Membre 723
     
    Merci Sandul, mais j'ai eu chaud: 25° en Corse, dixit meteo france ^^

    Connection connect = DriverManager.getConnection ( "jdbc:mysql:localhost","","" ); : localhost:3306, je crois. Mais ma mémoire flanche, je n'ai plus utilisé mysql depuis longtemps.

    Pas lu ton livre non plus. 3306 est le port par défaut de mysql et localhost est okay si tu fais une connexion à la base mysql installée sur ta machine (tu peux remplacer localhost par 127.0.0.1, aussi)

    ++
    0
    1. Caroline
       
      Bonjour Sandul, je crois que je me suis réjouit trop tôt. ce matin j'ai voulu m'assurer que tout marche comme auparavant. Alors j'ai redémarré mon pc. Alors surprise; quand je lance éclipse et tente d'exécuter mon code la même erreur " java.lang.ClassNotFoundException: com.mysql.jdbc.driver "
      revient alors que tout marchais il y'a un moment.
      En attendant je vais bidouiller pour voir. Mais répons moi si tu en sais quelque chose
      A++
      0
  8. sandul Messages postés 4013 Statut Membre 723
     
    Re,

    Oh, zarbi tout ça. Têtre tu n'exécutes pas la même chose qu'hier? Revérifie les "libraries" dans le "java build path" du projet. Est-ce que le jar mysql s'y trouve ?

    ++
    0
    1. Caroline
       
      C'est vraiment bizarre comme tu l'as dit. Tout est correct comme tu me l'a indiqué.
      Le jar mysql, le jar mysql-connector-java-5.1.10-bin sont bien présents dans les librairies.

      J'ai beaucoup tâtonné mais rien jusque là...( poutant il faut que j'y arrive )
      0
  9. sandul Messages postés 4013 Statut Membre 723
     
    Le jar mysql, le jar mysql-connector-java-5.1.10-bin sont bien présents dans les librairies. <== quel est ce "jar mysql" ? Tu as besoin uniquement de mysql-connector-java-5.1.10-bin.jar pour te connecter.
    0
  10. Caroline
     
    Coucou,
    j'ai remplacé com.mysql.jdbc.driver par com.mysql.jdbc.Driver
    et comme erreur il me retourne: java.sql.SQLException: No suitable driver
    ( driver non convenable si je ne me trompe ). Que faire de plus?
    En parcourant le forum j'ai remarqué que beaucoup ont des problèmes pour la connexion comme moi actu
    0
  11. sandul Messages postés 4013 Statut Membre 723
     
    Faut un "//" dans l'URL... Par exemple:

    package caroline;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    public class MainMySQLConnectionTest {
    	public static void main(String[] args) {
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    
    			Connection con = DriverManager.getConnection(
    					"jdbc:mysql://localhost", "", "");
    			// une requette simple
    			String ma_requette = "select CODE_STAGE, LIB_STAGE from GS_STAGE";
    
    			// Requette en utilisant un statement
    			Statement state = con.createStatement();
    			// On recoit
    			ResultSet resultat = state.executeQuery(ma_requette);
    
    			// Recuperation et traitement du resultat
    			System.out.println("Dans ma relation:");
    			while (resultat.next()) {
    				System.out.println(" |" + resultat.getString("CODE_STAGE")
    						+ " |" + resultat.getString("LIB_STAGE"));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    


    ++
    0
    1. Caroline
       
      Oui j'avais perçu //.
      Néanmoins j'obtiens java.sql.SQLException: Accès refusé pour l'utilisateur: ''@'@localhost' (mot de passe: NON)
      Pourquoi on me refuse l'accès à la base? Au moins je peux penser que le problème de driver est résolu ?
      0
  12. sandul Messages postés 4013 Statut Membre 723
     
    Oui, résolu. Suffit de renseigner un couple (user / mot de passe) décent :-D

    Essaie "root" sans mot de passe. J'en sais rien, je n'ai plus travaillé avec mysql depuis tellement longtemps
    0
    1. Caroline
       
      Youpi, ça marche nickel...Tu est un bon guide, merci pour ta patience; en tout cas j'ai pris beaucoup et trop beaucoup de ton temps combien précieux. J'espère que tu seras toujours dispos...
      Au fait voici finalement le bon chemin:
      Connection connect = DriverManager.getConnection ( "jdbc:mysql://127.0.0.1:3306/stage_ollo","root","" );

      Je te reviens très vite...
      0
  13. sandul Messages postés 4013 Statut Membre 723
     
    =) Content pour toi.

    Je te reviens très vite... ^^
    #man revenir (transitif)
    No answer found. For an intransitif usage = TO LIKE. Is this the deliberate meaning ?

    ++
    0
    1. Caroline
       
      Je ne suis pas un as de l'Anglais, je traduis mot par mot...

      Je sais qu'on communique à la base de données à travers des requêtes SQL.
      J'ai fini l'implémentation de mes écrans( même si ils ne sont pas très élégants) .
      Ce code est bon, mais c'est avec fichier dont je parlais. Comment le modifier pour pouvoir rediriger les différentes infos dans ma base.Surtout que j'ai des JTextField

      En claire comment gérer les autres classes avec la classe SeConnecter() pour mes infos se stocke dans la base?

      // code //
      public class Fournisseurs extends JFrame{
      private static final long serialVersionUID = 1L;
      Container ContentPane;
      JLabel label1, label2;
      JTextField fournis1,fournis2;
      JButton bout1,bout2;

      private FileWriter fluxwrite; //flux en écriture (fichier texte)
      private BufferedWriter fluxout;//tampon pour lignes du fichier

      //Active ou désactive le bouton pour sauvegarde :
      private void AutoriserSave(){
      if (fournis1.getText().length()!=0 && fournis2.getText().length()!=0 )
      bout1.setEnabled(true);
      else
      bout1.setEnabled(false);
      }
      /* Methode de sauvegarde des informations */
      public void ecrireEnreg(String record) {
      try {
      fluxout.write(record);//écrit les infos
      fluxout.newLine( ); //écrit le eoln
      }
      catch (IOException err) {
      System.out.println( "Erreur : " + err );
      }
      }

      public Fournisseurs(){
      fournir();
      }
      void fournir(){
      ContentPane = this.getContentPane( ) ;
      ContentPane.setLayout(null);
      ContentPane.setBackground(Color.lightGray);
      setResizable(false);
      setSize(570, 400);
      setTitle("BORDEREAU DE COMMANDES");
      setLocationRelativeTo(null);
      setVisible(true);
      label1 = new JLabel("N° Fournisseurs");
      label1.setBounds(150, 50, 150, 23);
      ContentPane.add(label1);

      label2 = new JLabel("Nom Fournisseur");
      label2.setBounds(150, 100, 150, 23);
      ContentPane.add(label2);

      fournis1 = new JTextField("");
      fournis1.setBounds(300, 50, 150, 23);
      ContentPane.add(fournis1);

      fournis2 = new JTextField("");
      fournis2.setBounds(300, 100, 150, 23);
      ContentPane.add(fournis2);

      bout1= new JButton("ENREGISTRER");
      bout1.setBounds(150, 150, 150, 35);
      ContentPane.add(bout1);

      bout2= new JButton("QUITTER");
      bout2.setBounds(300, 150, 150, 35);
      ContentPane.add(bout2);

      Document doc1 = fournis1.getDocument();// partie Modele MVC du JTextField
      Document doc2 = fournis2.getDocument();
      try{
      fluxwrite = new FileWriter("Founisseurs.txt",true);// création du fichier(en mode ajout)
      fluxout = new BufferedWriter(fluxwrite); //tampon de ligne associé
      }
      catch(IOException err){ System.out.println( "Problème dans l'ouverture du fichier ");}
      //--> événements et écouteurs :

      this.addWindowListener(
      new WindowAdapter(){
      public void windowClosing(WindowEvent e){

      try{
      fluxout.close( ); //le fichier est fermé et le tampon vidé*/
      }
      catch(IOException err){
      System.out.println( "Fermeture impossible ");
      }
      dispose();
      }
      });
      doc1.addDocumentListener(//on crée un écouteur anonyme pour le Modele (qui fait aussi le controle)
      new javax.swing.event.DocumentListener() {
      public void changedUpdate(DocumentEvent e) {}
      public void removeUpdate(DocumentEvent e) {//une suppression est un changement de texte
      textValueChanged(e);// appel au gestionnaire de changement de texte
      }
      public void insertUpdate(DocumentEvent e) {//une insertion est un changement de texte
      textValueChanged(e);// appel au gestionnaire de changement de texte
      }
      });

      doc2.addDocumentListener(
      new javax.swing.event.DocumentListener() {
      public void changedUpdate(DocumentEvent e) {}
      public void removeUpdate(DocumentEvent e) {
      textValueChanged(e);
      }
      public void insertUpdate(DocumentEvent e) {
      textValueChanged(e);
      }
      });
      bout1.addActionListener(
      new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
      ecrireEnreg( fournis1.getText()+" | "+ fournis2.getText());
      }
      });

      bout2.addActionListener(
      new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
      dispose();
      }
      });
      }
      //Gestionnaire du changement de texte dans un document
      private void textValueChanged(DocumentEvent e) {
      AutoriserSave();

      }
      }
      0
  14. sandul Messages postés 4013 Statut Membre 723
     
    Hey... Ton code est bord*****, impossible à lire... xD

    Pour répondre à tes questions concernant le lien entre le lien GUI - base de données:
    - tu as des informations saisies par l'utilisateur dans un ou plusieurs JTextField
    - il te faut un événement qui déclanche l'écriture dans la base; cet événement sera l'appui sur un bouton
    - à ce moment, tu récupères les infos saisies (via des getText() sur tes JTextField) et les utilises dans une requête SQL pour les écrire dans la base ==> tout ce code est donc dans la méthode actionPerformed() de ton JButton

    Il te faut un tuto JDBC. Regarde ici: https://www.roseindia.net/jdbc/jdbc.shtml surtout cette partie https://www.roseindia.net/jdbc/jdbc-mysql/InsertValues.shtml

    C'est en anglais, il est vrai, mais tu feras un effort car il est indispensable de lire cette langue si tu veux faire de la programmation.

    Il te faut également un tuto Swing: https://docs.oracle.com/javase/tutorial/uiswing/ (saute les parties NetBeans, tu bosses dans Eclipse). Tu peux installer également un plugin Eclipse te permettant de construire graphiquement ta fenêtre, mais je dirais qu'il faut d'abord essayer de le faire sans cet outil pour mieux comprendre

    Et pour que les autres comprennent ce que ton code veut dire, il faut lire et respecter ceci: https://www.oracle.com/java/technologies/javase/codeconventions-namingconventions.html

    Voici, tu as un long boulot devant toi...

    Bon courage
    ++
    0