IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

connexion entre java et mysql par jdbc odbc


Sujet :

JDBC Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut connexion entre java et mysql par jdbc odbc
    Bonjour à tous,

    Je cherche à établir une connexion entre java et mysql, à partir d'un driver jdbc-odbc. Pour l'instant, je n'y suis pas parvenu.

    J'ai installé le programme mysql-connector-odbc-3.51.23-0 depuis un package .rpm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [xxxx@localhost ~]$ rpm -qa | grep mysql
    mysql-5.0.45-6.fc7
    mysql-libs-5.0.45-6.fc7
    mysql-server-5.0.45-6.fc7
    mysql-connector-odbc-3.51.23-0
    Le programme mysql-connector-odbc-3.51.23-0 a apporté entre autres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [root@tempo-dhcp16 ~]# rpm -ql mysql-connector-odbc
    /usr/bin/myodbc3i
    /usr/bin/myodbc3m
    ...
    /usr/lib/libmyodbc3.so
    ...
    Pour info, je liste mes deux fichiers de configuration associés à odbc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // fichier de configuration /etc/odbcinst.ini
    [MySQL]
    DRIVER		= /usr/lib/libmyodbc3.so
    UsageCount		= 1
    et,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // fichier de configuration /etc/odbc.ini
    [MySQL-Forum]
    Description = MySQL database Forum
    Driver = MySQL
    Server = localhost
    Database = Forum
    Port = 3306
    Socket = /var/lib/mysql/mysql.sock
    Il existe bel et bien une base de donnée Forum dans le répertoire /var/lib/mysql,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mysql> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    ..
    | Forum              | 
    ..
    +--------------------+
    Je vérifie la connexion entre odbc et mysql et le bon fonctionnement du driver en utilisant la commande isql,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [xxxx@localhost accèsODBC]$ isql MySQL-Forum root xxxx
    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    Je pense que tout ceci montre que:
    - un connecteur jdbc-odbc est bien installé
    - une base de donnée nommée Forum est bien créée
    - odbc peut se connecter à la base de donnée Forum via le driver libmyodbc3.so

    Le problème que je rencontre, apparaît au niveau de la connexion entre java et odbc.

    Le code java que je compile et exécute est listé ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import java.sql.Connection ;
    import java.sql.DriverManager ;
    public class Forum {
    	public static void main (String[] args) throws Exception {
    		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
    		Connection c = DriverManager.getConnection("jdbc:odbc:Forum");
    		System.out.println("Connexion ouverte") ;
    		c.close() ;
    		System.out.println("Connexion fermée") ; 
    	}
    }
    La compilation ne génère pas d'erreur. Par contre j'obtiens ensuite une erreur de mémoire java.lang.NullPointerException,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [xxxx@localhost accèsODBC]$ java Forum
    Exception in thread "main" java.lang.NullPointerException
            at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)
            at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)
            at java.sql.DriverManager.getConnection(DriverManager.java:525)
            at java.sql.DriverManager.getConnection(DriverManager.java:171)
            at Forum.main(Forum.java:18)
    Clairement, la connexion ne se fait pas. L'url "jdbc:odbc:Forum" n'est pas correcte. J'ai testé quelques autres url un peu au hasard comme par exemple "jdbc:odbc://localhost/MySQL-Forum". J'ai aussi tenté d'ajouter le nom de l'utilisateur et le mot de passe "jdbc:odbc://localhost/MySQL-Forum","root","xxxx", mais rien n'y fait.

    La FAQ de développez.com dit ceci:
    Les URL JDBC sont définies sous forme de String selon ce schéma :
    String url = "jdbc:<subprotocol>:<subname>"
    <subname> Une manière d'identifier la source de données. Ce dernier élément dépend complètement du sous-protocole et du driver.
    Par exemple :
    * jdbc:odbc:maBase;CacheSize=30;ExtensionCase=LOWER
    * jdbc:mysql://localhost/maBase
    * jdbc:oracle:oci8@:maBase
    * jdbc:oracle:thin@://localhost:8000:maBase
    * jdbc:sybase:Tds:localhost:5020/maBase
    Il est nécessaire de se documenter auprès du fournisseur du driver.
    Sachant que le fichier /usr/share/doc/mysql-connector-odbc-3.51.23/README n'apporte pas cette information, où puis-je trouver la bonne syntaxe de l'url dans getConnection(url) qui correspond à mon driver..?

    Je remercie vivement ceux qui ont lu ce message jusqu'au bout. Pensez-vous que le problème est bien dans la syntaxe de l'url? Dans le cas contraire, quelle est votre diagnostic? Comment vous connectez-vous à mysql si vous utilisez linux?

    N.B. j'utilise fedora, jdk1.5.0, et pour l'instant je code directement à partir de la console.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Salut

    Le problème vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection c = DriverManager.getConnection("jdbc:odbc:Forum");
    Tu ne dois pas utiliser le nom de ta base de données mais la référence sous laquelle elle est connue dans ODBC, c'est à dire "MySQL-Forum" si je comprends bien ton code.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Salut @Ikey, et merci pour ta réponse.
    Si comme tu le proposes, j'écris plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection c = DriverManager.getConnection("jdbc:odbc:MySQL-Forum");
    j'obtiens encore la même erreur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [yann@localhost accèsODBC]$ java Forum
    Exception in thread "main" java.lang.NullPointerException
            at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)
            at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)
            at java.sql.DriverManager.getConnection(DriverManager.java:525)
            at java.sql.DriverManager.getConnection(DriverManager.java:193)
            at Forum.main(Forum.java:18)

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Et si tu rajoutes le login et le mot de passe, ca donne quoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection c = DriverManager.getConnection("jdbc:odbc:MySQL-Forum", "[login]", "[password]");

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Si je fais,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection c = DriverManager.getConnection("jdbc:odbc:MySQL-Forum","root","mon mot de passe");
    j'obtiens encore une fois le même message d'erreur.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Bon, alors essaie de décomposer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    import java.sql.*;
     
    public class Forum {
        public static void main (String[] args) 
        {
            Connection c = null;
     
            try
            {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
            }
            catch (Exception e)
            {
                System.err.println("Problème de chargement du driver")
                System.exit(0);
            }
     
            try
            {
                c = DriverManager.getConnection("jdbc:odbc:MySQL-Forum", "[login]", "[password]")
                System.out.println("Connexion ouverte") ;
            }
            catch (Exception e)
            {
                System.err.println("Impossible d'ouvrir la connexion")
                System.exit(0);
            }
     
            try
            {
                c.close() ;
                System.out.println("Connexion fermée") ; 
            }
            catch (Exception e)
            {
                System.err.println("impossible de fermer la connexion")
                System.exit(0);
            }
        }
    }

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    je trouve dans ce cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [xxxx@localhost accèsODBC]$ java Forum
    Impossible d ouvrir la connexion

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Je commence à venir à cours d'idée!
    T'as essayé de te connecter directement à la base?

    Comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Class.forName("com.mysql.jdbc.Driver");
    Connection c = DriverManager.getConnection("jdbc:mysql://localhost/Forum",
    "[login]","[password]");

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Non je n'avais pas encore essayé ça (i.e. sans passer par odbc, si je comprends bien). A vrai dire, je ne savais pas que c'était faisable.
    Je viens de faire cet essai, mais j'obtiens une erreur au chargement du driver,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String nomDriver = "com.mysql.jdbc.Driver";
    try
    {
        Class.forName(nomDriver); 
    }
    catch(ClassNotFoundException cnfe)
    {
        System.out.println("La classe "+nomDriver+" n'a pas été trouvée");
    }
    donne,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [yann@localhost accèsODBC]$ java Forum
    La classe com.mysql.jdbc.Driver n'a pas été trouvée
    Quel est ce driver? Où peut-on le trouver?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Avec obdc tu crées un pont entre la base et java. C'est utile uniquement pour les base de microsoft genre SQL Server.
    Toutes les autres (ou presque) ont des drivers écrits entièrement en java, qui permettent de se connecter directement à la base sans créer un pont. Le pont étant utile pour les architectures n-tiers. Mais même dans ce cas, on peut se passer d'odbc.

    Quoiqu'il en soit regarde par ca devrait t'aider

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide: on dirait que les choses commencent à se débloquer! J'ai effectivement pu récupérer sur le site de mysql un driver tout en java, qui s'appelle "mysql-connector-java-5.1.6.tar.gz". En le décompressant, on voit que celui-ci renferme "mysql-connector-java-5.1.6-bin.jar". J'ai déplacé ce dernier dans "/opt/jdk1.5.0_13/lib".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [xxxx@localhost ~]$ cd /opt/jdk1.5.0_13/lib
    [xxxx@localhost lib]$ ls
    dt.jar             ir.idl        mysql-connector-java-5.1.6-bin.jar  sa-jdi.jar
    htmlconverter.jar  jconsole.jar  orb.idl                             tools.jar
    Ensuite j'ai exécuté le code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    import java.sql.*;
     
    public class Forum {
     
    public static void main (String[] args) throws Exception {
    	try
    	{
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        java.sql.Connection conn = java.sql.DriverManager.getConnection(
          "jdbc:mysql://localhost/Forum?user=root&password=xxxx");
    	}
    	catch(Exception e)
    	{
    	System.out.println("Connection ratée: "+e);
    	System.exit(-1);  
    	}
    }
     
    }
    et j'ai obtenu l'erreur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [xxxx@localhost accèsODBC]$ java Forum
    Connection ratée: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    Est ce que j'ai copié le driver "mysql-connector-java-5.1.6-bin.jar" au bon endroit? Je n'en suis pas certain. Le readme correspondant au driver dit,
    Once you have extracted the distribution archive, you can install

    the driver by placing mysql-connector-java-[version]-bin.jar in

    your classpath, either by adding the full path to it to your

    CLASSPATH environment variable, or by directly specifying it with

    the command line switch -cp when starting your JVM.



    If you are going to use the driver with the JDBC DriverManager,

    you would use com.mysql.jdbc.Driver as the class that implements

    java.sql.Driver.



    You can set the CLASSPATH environment variable under UNIX, Linux

    or Mac OS X either locally for a user within their .profile,

    .login or other login file. You can also set it globally by

    editing the global /etc/profile file.
    J'ai bien respecté ces indications, mais il reste encore un petit problème quelque part.. @Ikey, je regarderai à nouveau ça un peu plus tard ce soir et je te tiendrai au courant. Et encore merci pour ta précieuse aide!

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Maintenant la connexion java - mysql fonctionne très bien.

    La compilation et l'exécution immédiates du programme de test de connexion (que j'appelle Forum.java, cf posts précédents) donne une erreur "java.lang.ClassNotFoundException",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [xxxx@localhost accèsODBC]$ javac Forum.java
    [xxxx@localhost accèsODBC]$ java Forum
    Connection ratée: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    Pour établir la connexion, je dois ajouter le chemin du répertoire où est placé "mysql-connector-java-5.1.6-bin.jar" à la variable CLASSPATH,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [xxxx@localhost accèsODBC]$ echo $CLASSPATH
     
    [xxxx@localhost accèsODBC]$  export set CLASSPATH=/opt/jdk1.5.0_13/lib/mysql-connector-java-5.1.6-bin.jar:$CLASSPATH
    [yann@localhost accèsODBC]$ echo $CLASSPATH
    /opt/jdk1.5.0_13/lib/mysql-connector-java-5.1.6-bin.jar:
    Ensuite l'exécution du programme de test de connexion ne génère plus d'erreur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [xxxx@localhost accèsODBC]$ javac Forum.java
    [xxxx@localhost accèsODBC]$ java Forum
    Je remercie @Ikey pour son aide précieuse. Le problème est résolu. Finalement l'établissement d'une connexion odbc n'était pas nécessaire et le driver "mysql-connector-java-5.1.6-bin.jar" m'a permis d'établir la connexion que je souhaitais entre java et mysql.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connexion mySQL par pilote ODBC
    Par engrobel dans le forum MySQL
    Réponses: 5
    Dernier message: 02/12/2008, 17h46
  2. connexion entre java et BD Acces
    Par mayaD dans le forum JDBC
    Réponses: 2
    Dernier message: 06/07/2008, 22h16
  3. Connexion mysql par jdbc
    Par Photon- dans le forum Installation
    Réponses: 5
    Dernier message: 03/03/2008, 10h59
  4. acces base mysql par jdbc via un proxy
    Par xavfree dans le forum JDBC
    Réponses: 4
    Dernier message: 23/07/2007, 14h48
  5. Connexion entre Dreamweaver et Mysql
    Par hoangeric dans le forum Outils
    Réponses: 17
    Dernier message: 08/07/2006, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo