Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/05/2010, à 20:42

anix

[Résolu] java mysql

quels sont les conditions nécessaires pour faire une connexion java et mysql
c'est à dire qu'est ce qu'il faut que j'installe pour faire cette connexion
j'ai ubuntu 10.04, j'ai installé mysql et phpmyadmin et j'ai essayé de faire une connexion java avec mysql et ça ne marche pas chez moi

merci d'avance pour les réponses

Dernière modification par anix (Le 25/05/2010, à 20:48)

Hors ligne

#2 Le 22/05/2010, à 22:41

Respawner

Re : [Résolu] java mysql

Il te faut le connector qui va bien pour ouvrir une connexion avec le serveur MySQL. Ce que tu cherches se trouve ici.

Hors ligne

#3 Le 22/05/2010, à 22:48

anix

Re : [Résolu] java mysql

merci

Hors ligne

#4 Le 23/05/2010, à 21:31

anix

Re : [Résolu] java mysql

merci mais je n'ai pas sû comment utiliser le connector
est-ce que tu saurais comment faire pour la connexion

merci d'avance

Hors ligne

#5 Le 23/05/2010, à 23:34

alexduf

Re : [Résolu] java mysql

as-tu lu la documentation fournie avec le driver mysql ?
C'est plutot bien décri il me semble wink

Hors ligne

#6 Le 24/05/2010, à 18:38

anix

Re : [Résolu] java mysql

non, je ne l'ai pas compris
est-ce que vous avez un éclaircissement
merci d'avance

Hors ligne

#7 Le 24/05/2010, à 22:49

alexduf

Re : [Résolu] java mysql

commence par nous dire où tu bloques alors.

Hors ligne

#8 Le 25/05/2010, à 12:59

anix

Re : [Résolu] java mysql

voici mon code java:
        String pilote = "com.mysql.jdbc.Driver";
        try{
            Class.forName(pilote);
            Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/ris","root","");
            System.out.println(connexion);
            Statement instruction = connexion.createStatement();
            System.out.println(instruction);

            String cmdInsert="INSERT INTO `ris`.`patient` (`identifiant`, `nom`, `prenom`, `sexe`, `date_de_naissance`) " +
            "VALUES ('"+id.getText()+"', '"+nom.getText()+"' ,'"+prenom.getText()+"' ,'"+sexe.getText()+"' ,'"+dateNais.getText()+"' )";
            System.out.println(cmdInsert);
           
            try {
            boolean resultat2 = instruction.execute(cmdInsert);
            }
            catch (Exception e)
            {
                System.err.println("mauvais insert");
            }
            instruction.close();
        }
        catch (Exception e)
        {
            System.err.println("mauvais pilote");
        }

j'ai installé phpmyadmin et il marche sans problémes
j'ai mit le jar du mysql-connector dans libraries de netbeans
j'ai mit aussi le chemin du mysql-connector dans le CLASSPATH dans le .profile

mais toujours il me sort le message "mauvais pilote"
est-ce que vous avez une idée quoi faire

merci d'avance

Hors ligne

#9 Le 25/05/2010, à 13:47

alexduf

Re : [Résolu] java mysql

anix a écrit :

mais toujours il me sort le message "mauvais pilote"
est-ce que vous avez une idée quoi faire

merci d'avance

D'après ton code, cela signifie qu'il passe toujours dans ton catch. Ce qui siginifie qu'il y a une exception qui remonte systématiquement. Le problème c'est que tu n'affiche aucune information sur ton exception.

transforme donc ton

        catch (Exception e)
        {
            System.err.println("mauvais pilote");
        }

en

        catch (Exception e)
        {
            e.printStackTrace();
            System.err.println("mauvais pilote");

        }

relance ton code, et regarde quelle exception sort (et à quelle ligne). Si tu ne vois pas, cherche un peu à partir du nom de l'exception sur google, si tu ne trouves toujours pas, reviens poser une question ici ^^

J'ai aussi vu ta façon de passer des paramètres à une requête, c'est pas du tout élégant, quand tu auras résolu ton premier problème il faudra que tu jettes un oeil à la classe PreparedStatement. Pareil, si tu comprends pas, pose une question.

Bonne continuation

Hors ligne

#10 Le 25/05/2010, à 14:22

anix

Re : [Résolu] java mysql

merci alexduf

Hors ligne

#11 Le 25/05/2010, à 16:38

anix

Re : [Résolu] java mysql

voici l'erreur
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:186)
        at ris1.Ris1View.ValiderActionPerformed(Ris1View.java:299)
        at ris1.Ris1View.access$800(Ris1View.java:24)
        at ris1.Ris1View$4.actionPerformed(Ris1View.java:151)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6108)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:5873)
        at java.awt.Container.processEvent(Container.java:2105)
        at java.awt.Component.dispatchEventImpl(Component.java:4469)
        at java.awt.Container.dispatchEventImpl(Container.java:2163)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
        at java.awt.Container.dispatchEventImpl(Container.java:2149)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
mauvais pilote

je n'ai pas trouvé dans internet quelque chose d'intéressant

Hors ligne

#12 Le 25/05/2010, à 16:40

funkalee

Re : [Résolu] java mysql

jdbc:mysql://localhost:3306/ris avec le numéro de port c'est mieux
ajoute le jar du driver dans la bibliothèque de ton IDE ensuite tu l'ajoutera a ton projet par l'IDE, si tu code avec blocnote ou gedit, alors.... allons cueillir des cerises
PS: quand tu donne du code, met tout le code.... du package a la derniere ligne, on sait meme pas si tu as importé les classes nécessaire

Dernière modification par funkalee (Le 25/05/2010, à 16:48)

Hors ligne

#13 Le 25/05/2010, à 16:40

anix

Re : [Résolu] java mysql

alexduf a écrit :
anix a écrit :

mais toujours il me sort le message "mauvais pilote"
est-ce que vous avez une idée quoi faire

merci d'avance

D'après ton code, cela signifie qu'il passe toujours dans ton catch. Ce qui siginifie qu'il y a une exception qui remonte systématiquement. Le problème c'est que tu n'affiche aucune information sur ton exception.

transforme donc ton

        catch (Exception e)
        {
            System.err.println("mauvais pilote");
        }

en

        catch (Exception e)
        {
            e.printStackTrace();
            System.err.println("mauvais pilote");

        }

relance ton code, et regarde quelle exception sort (et à quelle ligne). Si tu ne vois pas, cherche un peu à partir du nom de l'exception sur google, si tu ne trouves toujours pas, reviens poser une question ici ^^

J'ai aussi vu ta façon de passer des paramètres à une requête, c'est pas du tout élégant, quand tu auras résolu ton premier problème il faudra que tu jettes un oeil à la classe PreparedStatement. Pareil, si tu comprends pas, pose une question.

Bonne continuation

c'est quoi la classe PreparedStatement ?

Hors ligne

#14 Le 25/05/2010, à 16:42

anix

Re : [Résolu] java mysql

funkalee a écrit :

jdbc:mysql://localhost:3306/ris avec le numéro de port c'est mieux

je n'ai pas comprit

Hors ligne

#15 Le 25/05/2010, à 17:03

funkalee

Re : [Résolu] java mysql

voici un code que j'ai recupreré il y a matiere a comprendre et il est utilisable

//ExecuteSQL.java
import java.sql.*;
import java.io.*;
//argument de ligne de commande
//-d com.mysql.jdbc.Driver -u User  -p Psswd jdbc:mysql://localhost:3306/database
/**
 * Un interpreteur SQL générique.
 * ligne de commande
 * Usage: java ExecuteSQL$SQLConsole [-d <driver>] "
+ "[-u <user>] [-p <password>] <database URL>
 *
 **/
public class ExecuteSQL {

  /**
   * Cette méthode tente d'afficher le contenu d'un objet ResulSet dans
   * un tableau. Elle se base sur la classe ResultSetMetaData. Une bonne
   * partie du code ne s'occupe que de la manipulation de chaîne de
   * caractères.
   * @param rs
   * @param output
   * @throws SQLException
   */
  static void printResultsTable(ResultSet rs, OutputStream output)
          throws SQLException {
    // Configure le flux de sortie
    PrintWriter out = new PrintWriter(output);

    // Récupère quelques "meta-données" (noms de colonnes, etc.)
    // concernant les résultats.
    ResultSetMetaData metadata = rs.getMetaData();

    // Variables contenant des données importants à propos des
    // tableaux à afficher.
    int numcols = metadata.getColumnCount(); // nombre de colonnes
    String[] labels = new String[numcols];   // étiquettes des colonnes
    int[] colwidths = new int[numcols];      // leur taille(largeur)
    int[] colpos = new int[numcols];         // position de départ
    int linewidth;                           // taille total de la table

    // Détermine la largeur des colonnes, le point de départ de
    // chacune d'elles, la largeur de chaque lignes du tableau, etc.
    linewidth = 1; // pour le caractère '|' initial.
    for (int i = 0; i < numcols; i++) { // pour chaque colonnes
      colpos[i] = linewidth; // enregistre la position
      labels[i] = metadata.getColumnLabel(i + 1); // récupere son étiquette
      // Get the column width.  If the db doesn't report one, guess
      // 30 characters.  Then check the length of the label, and use
      // it if it is larger than the column width

      // Récupere la largeur de la colonne. Si la BD ne fournit pas
      // cette information, utilise une largeur par défaut de 30
      // caractères. Contrôle ensuite la longueur de l'étiquette et
      // utilise cette longueur si elle est supérieur à la largeur
      // de la colonne.
      int size = metadata.getColumnDisplaySize(i + 1);
      if (size == -1) {
        size = 30;  // certains drivers retourne -1...
      }
      if (size > 500) {
        size = 30;  // N'autorise pas de tailles non raisonnable
      }
      int labelsize = labels[i].length();
      if (labelsize > size) {
        size = labelsize;
      }
      colwidths[i] = size + 1; // Enregistre la taille de la colonne
      linewidth += colwidths[i] + 2; // incrémente  la taille total
    }

    // Crée une ligne séparatrice horizontale. Crée également une
    // ligne vide representant la valeur initiale de chaque ligne du
    // tableau.
    StringBuffer divider = new StringBuffer(linewidth);
    StringBuffer blankline = new StringBuffer(linewidth);
    for (int i = 0; i < linewidth; i++) {
      divider.insert(i, '-');
      blankline.insert(i, " ");
    }

    // Place des marques spéciales dans la ligne séparatrice, aux
    // positions correspondant aux colonnes.
    for (int i = 0; i < numcols; i++) {
      divider.setCharAt(colpos[i] - 1, '+');
    }
    divider.setCharAt(linewidth - 1, '+');

    // Commence le tableau d'affichage par une ligne séparatrice
    out.println(divider);

    // La ligne suivante contient les étiquettes des colonnes.
    // Commence par une ligne vide, puis insere les noms des colonnes
    // et les caractères "|" de séparation des colonnes. La méthode
    // overwrite() est définie ci-dessous.
    StringBuffer line = new StringBuffer(blankline.toString());
    line.setCharAt(0, '|');
    for (int i = 0; i < numcols; i++) {
      int pos = colpos[i] + 1 + (colwidths[i] - labels[i].length()) / 2;
      overwrite(line, pos, labels[i]);
      overwrite(line, colpos[i] + colwidths[i], " |");
    }

    // Affiche les étiquettes des colonnes, puis insère une nouvelle
    // ligne séparatrice
    out.println(line);
    out.println(divider);

    // Affiche les données dans le tableau. Boucle sur l'objet
    // ResultSet avec la méthode next() pour extraire les lignes
    // les unes après les autres. Extrait la valeur de chaque colonne
    // en utilisant la méthode getObject() et affiche, comme nous
    // l'avons fait avec les étiquettes des colonnes, ci-dessus.
    while (rs.next()) {
      line = new StringBuffer(blankline.toString());
      line.setCharAt(0, '|');
      for (int i = 0; i < numcols; i++) {
        Object value = rs.getObject(i + 1);
        if (value != null) {
          overwrite(line, colpos[i] + 1, value.toString().trim());
        }
        overwrite(line, colpos[i] + colwidths[i], " |");
      }
      out.println(line);
    }

    // Enfin, achève le tableau avec une dernière ligne séparatrice.
    out.println(divider);
    out.flush();
  }

  /**
   * Cette méthode utilitaire est utilisée lors de l'affichage du
   * tabelau des résultats.
   * @param b
   * @param pos
   * @param s
   */
  static void overwrite(StringBuffer b, int pos, String s) {
    int slen = s.length(); // taille de la chainestring length
    int blen = b.length(); // taille de la chaine tampon buffer
    if (pos + slen > blen) {
      slen = blen - pos; // Y a-t-il assez de place?
    }
    for (int i = 0; i < slen; i++) { // copy la chaine dans le buffer
      b.setCharAt(pos + i, s.charAt(i));
    }
  }

  public static class SQLConsole {

    public static void main(String[] args) {
      // Notre connexion jdbc au serveur de bases de données
      Connection conn = null;
      try {
        String driver = null, url = null, user = "", password = "";

        // Analyse tous les arguments de la ligne de commande
        for (int n = 0; n < args.length; n++) {
          if (args[n].equals("-d")) {
            driver = args[++n];
          } else if (args[n].equals("-u")) {
            user = args[++n];
          } else if (args[n].equals("-p")) {
            password = args[++n];
          } else if (url == null) {
            url = args[n];
          } else {
            throw new IllegalArgumentException("Unknown argument.");
          }
        }

        // Le seul argument requis est l'URL de la base de données.
        if (url == null) {
          throw new IllegalArgumentException("No database specified");
        }

        // Si l'utilisateur a spécifié un nom de classe pour le driver
        // de BD, charge dynamiquement cette classe. Ce procedé donne
        // au driver l'opportunité de s'enregistrer auprès du
        // gestionnaire DriverManager.
        if (driver != null) {
          Class.forName(driver);
        }

        // Établit une connexion avec la base de données spécifiée, en
        // utilisant le nom d'utilisateur et le mot de passe
        // éventuellement spécifiés par l'utilisateur. Le gestionnaire
        // de driver teste tous les pilotes de BD qu'il connaît afin
        // d'analyser l'URL et se connecter au serveur de BD.
        conn = DriverManager.getConnection(url, user, password);

        // Crée l'instruction que nous utiliserons pour parler à la BD
        Statement s = conn.createStatement();

        // Récupere un flux permettant de lire à partir de la console
        BufferedReader in =
                new BufferedReader(new InputStreamReader(System.in));

        // Entre dans une boucle infinie qui lit les requête de
        // l'utilisateur
        while (true) {
          System.out.print("sql> ");   // interroge l'utilisateur
          System.out.flush();          // affiche l'invite de commandes
          String sql = in.readLine();  // lit l'entrée de l'utilisateur

          // Quitte lorsque l'utilisateur tape "quit".
          if ((sql == null) || sql.equals("quit")) {
            break;
          }

          // Ignore les lignes vides
          if (sql.length() == 0) {
            continue;
          }

          // Éxécute l'instruction SQL de l'utilisateur et affiche
          // les résultats.
          try {
            // Nous ne savons pas si il s'agit d'une requête ou
            // d'une forme de mise à jour, aussi utilisons-nous la
            // méthode execute() plutot que la méthode
            // executeQuery() ou executeUpdate(). Si la valeur de
            // retour est vraie, alors il s'agissait d'une
            // requête, sinon d'une mise à jour.
            boolean status = s.execute(sql);

            // Certaines requêtes SQL complexes peuvent retourner
            // plus d'un ensemble de résultats, aussi bouclons-nous
            // jusqu'à ce qu'il n'y ait plus de résultat.
            do {
              // il s'agissait d'une requête et nous retournons
              // un objet ResultSet
              if (status) { // it was a query and returns a ResultSet
                ResultSet rs = s.getResultSet();   // Résultats
                printResultsTable(rs, System.out); // Affichage
              } else {
                // Si la commande éxécutée representait
                // une mise à jour plutôt qu'une requête, alors
                // la méthode ne retourne pas un objet ResultSet.
                // Nous affichons seulement le nombre de lignes
                // concernées
                int numUpdates = s.getUpdateCount();
                System.out.println("Ok. " + numUpdates
                        + " rows affected.");
              }
              // Vérifie qu'il n'y a plus de résultats à
              // afficher, ou affiche les résultats restants en
              // utlisant une boucle.
              status = s.getMoreResults();
            } while (status || s.getUpdateCount() != -1);
          } // Si une exception SQLException est levée, affiche un
          // message d'erreur. Notez que les exceptions SQLException
          // peuvent avoir un message général ainsi qu'un message
          // spécifique à la BD, retourné par getSQLState()
          catch (SQLException e) {
            System.err.println("SQLException: " + e.getMessage() + ":"
                    + e.getSQLState());
          } // À chaque passage dans la boucle, vérifie qu'il n'y a
          // pas eu d'avertissements. Notez qu'il peut y avoir une
          // chaîne entière d'avertissements.
          finally { // affiche les avertissements
            SQLWarning w;
            for (w = conn.getWarnings(); w != null; w = w.getNextWarning()) {
              System.err.println("WARNING: " + w.getMessage()
                      + ":" + w.getSQLState());
            }
          }
        }
      } // Gère les exceptions qui se produisent durant l'analyse des
      // arguments, la configuration, etc. Affiche les détails des
      // SQLException.
      catch (Exception e) {
        System.err.println(e);
        if (e instanceof SQLException) {
          System.err.println("SQL State: "
                  + ((SQLException) e).getSQLState());
        }
        System.err.println("Usage: java ExecuteSQL [-d <driver>] "
                + "[-u <user>] [-p <password>] <database URL>");
      } // Vérifie que la connexion à la base de données est toujours
      // refermée avant de quitter, soit parce que l'utilisateur a entré
      // la commande 'quit', soit parce qu'une exception a été levée
      // durant la configuration. La fermeture de cette connexion ferme
      // implicitement toutes les instructions ouvertes et les ensembles
      // de résultats associés.
      finally {
        try {
          conn.close();
        } catch (Exception e) {
        }
      }
    }
  }
}

Hors ligne

#16 Le 25/05/2010, à 18:02

alexduf

Re : [Résolu] java mysql

Bon alors, un problème à la fois :

ClassNotFoundException : si t'es pas anglophone ça veut dire grosso modo "au secours il me manque une classe". La classe qui manque en l'occurence, c'est le driver.

Donc tu as un problème de classpath. Je devance un question probable "c'est quoi le classpath". Là je t'invite à faire un tour sur le net pour trouver ta réponse.

D'ailleurs tu trouveras tout ce qu'il te faut ici : http://www.siteduzero.com/tutoriel-3-119257-se-connecter-a-sa-bdd.html

Hors ligne

#17 Le 25/05/2010, à 18:43

anix

Re : [Résolu] java mysql

merci

Hors ligne

#18 Le 25/05/2010, à 19:00

anix

Re : [Résolu] java mysql

j'ai bien changé le classpath dans le .profile
ça ne marche pas

Hors ligne

#19 Le 25/05/2010, à 19:27

funkalee

Re : [Résolu] java mysql

apprend a te servir un peu plus de eclipse ou netbeans, c'est ca ton vrai probleme et pas le classpath

Hors ligne

#20 Le 25/05/2010, à 19:35

anix

Re : [Résolu] java mysql

j'ai bien chagé le classpath dans netbeans à l'aide de TOOLS/LIBRARIES
ça ne marche pas

Hors ligne

#21 Le 25/05/2010, à 20:30

funkalee

Re : [Résolu] java mysql

dans netbeans tu ajoute une nouvelle libraire en définissant un nom pour ta librairie et surtout le chemin des classes, qui sont souvent dans des jar, ensuite tu click droit sur ton projet et propriété de ton projet et tu vas dans la section librairie et la tu ajoute la librairie a ton projet
le driver mysql est fournis avec netbeans donc je te montre pas comment ajouter une librairie
mais pour ajouter une librairie a ton projet voici ce que tu peux faire
capture1ax.png
capture2ow.png
capture3k.png

Dernière modification par funkalee (Le 25/05/2010, à 20:31)

Hors ligne

#22 Le 25/05/2010, à 20:33

anix

Re : [Résolu] java mysql

merci

Hors ligne

#23 Le 25/05/2010, à 20:42

funkalee

Re : [Résolu] java mysql

si c'est résolu oublie pas de le mettre dans le titre

Hors ligne

#24 Le 25/05/2010, à 20:48

anix

Re : [Résolu] java mysql

1000 mercis funkalee
ça marche enfin

Hors ligne

#25 Le 25/05/2010, à 22:36

alexduf

Re : [Résolu] java mysql

punaise, les captures d'écran et tout ! Si ça c'est pas de la gentillesse ! big_smile

Hors ligne