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

avec Java Discussion :

Utilisation de Class.forName


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut Utilisation de Class.forName
    Bonjour,

    J'ai crée une connexion à une base de données access, depuis une application java.
    Pour cela, j'ai ecrit les instructions suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     final String driverOdbc= "sun.jdbc.odbc.JdbcOdbcDriver"; // driver odbc inclus dans le jdk 
     
    			  // Autochargement du driver
    			// Au chargement d'une classe Java, votre JVM crée automatiquement un objet.
    			 //Celui-ci récupère toutes les caractéristiques de votre classe ,  c'est à dire par exemple quels sont ses constructeurs, toutes ses méthodes, toutes ses propriétés etc...)
    			 // Il s'agit d'un objet de type Class.
     
    			 //on crée une instance de la classe Class pour la classe de nom driverOdbc
                 Class c1 = Class.forName(driverOdbc);
                 //on crée une nouvelle instance de la classe décrite par c1 , c'est à dire  une instance de la classe driverOdbc
               	c1.newInstance();
    Bien que dans mon commentaire, j'aie écrit ceci


    // Autochargement du driver
    // Au chargement d'une classe Java, votre JVM crée automatiquement un objet.
    //Celui-ci récupère toutes les caractéristiques de votre classe , c'est à dire par exemple quels sont ses constructeurs, toutes ses méthodes, toutes ses propriétés etc...)
    // Il s'agit d'un objet de type Class.

    //on crée une instance de la classe Class pour la classe de nom driverOdbc
    Class c1 = Class.forName(driverOdbc);
    //on crée une nouvelle instance de la classe décrite par c1 , c'est à dire une instance de la classe driverOdbc
    c1.newInstance();
    Je voudrais obtenir des précisions suivantes :

    -tout d'abord, pourquoi passer par le fait de créer un objet de type Class , pour ensuite créer une instance de la classe passée en paramètre, ici(driverOdbc) au lieu de directement créer une instance de la classe driverOdbc.

    Est-ce du fait que la classe driverOdbc n'est peut-être pas une classe mais une interface, ou une classe abstraite?
    En regardant dans l'APi java, je ne trouve pas ce nom de classe, ni d'interface mais uniquement l'interface driver.

    Qu'est-ce que driverOdbc exactement : un nom de classe, d'interface, de classe abstraite?

    Merci beaucoup de bien vouloir m'aider à répondre à cette question.

    Ensuite, concernant le role du driver jdbc:odbc, si je comprends bien, son rôle consiste à traduire les commandes java dans un langage compris par le SGBDR Access: de quelles commandes java s'agit-il?
    Si je m'en tiens aux requêtes SQL intégrées à l'application java telles que l'on peut le voir dans le code ci-dessous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ConnexionSQL = DriverManager.getConnection("jdbc:odbc:bdd_clients","","");
    			//ConnexionSQL = 		//Connexion à une base de données nommée sur un serveur distant :
     
     
    			  stmt = ConnexionSQL.createStatement();
    			  requete_1 = "select ID_CLI,NOM_CLI,PRENOM_CLI,AD1_CLI,AD2_CLI, AD3_CLI, TYPE_CLI from CLIENTS_PARTICULIERS ;
    Le langage de requêtage SQl est également compris par Access, donc quel type d'instruction a donc besoin de traduire le driver jdbc:odbc

    Pour terminer, peut -on dire qu'une classe abstraite possède un constructeur par défaut sans paramètres, même si on ne définit pas de constructeur pour une classe abstraite du fait qu'elle n'est pas instanciable.

    Merci encore beaucouo de votre aide sur tous ces points.

    Cordialement.

    new_wave

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Bonsoir ,

    Alors

    1/ driverOdbc n'est pas une classe mais une string qui contient le chemin du driver que doit utiliser jdbc pour fonctionner, en faisant sa tu lui dis quel driver(logiciel) utiliser pour fonctionner avec mysql oracle access. Pour utiliser le driver odbc tu saisies le nom en fait. Tu vas me dire pourquoi celui la et pas un autre, parce que tout le monde à fait un copier coller du code de la connexion pour commencer l'utilisation de jdbc et c'est le driver le plus utilisé.

    JdbcOdbcDriver => tu utilises odbc dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Class c1 = Class.forName(driverOdbc);
    Cette ligne est pour dire à jdbc que c'est le driver JdbcOdbcDriver que tu as choisi. Odbc sera ton pont entre java et le server de base de données

    2/jdbc:odbc: ne traduit rien c'est la clef pour ouvrir la porte au bout du pont pour accéder à tes données jdbc:odbc:bdd_clients","",""

    bdd_clients : nom de la base
    "" : le login de connexion
    "" : le mot de passe

    sésame ouvre toi :p.

    Tu peux tout à fait sous Windows mettre en place un odbc fixe, certaines applications doivent avoir une connexion à une base pour fonctionner. On peut prendre l'exemple d'unica (logiciel d'ibm).

    3/ Non on ne peut pas dire cela, une classe abstraite n'est pas instanciable donc pas de constructeur, il n'y a rien à construire, il faut voir plutôt la classe abstraite comme un contrôle de l'utilisation d'une classe. J' entend par la qu'une classe héritant d'une classe abstraite devra respecter le modèle de cette classe mère.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    depuis pas mal de temps quand on a un Driver jdbc il n'y a plus besoin de faire des Class.forName etc...
    Si le jar du driver est dans le classPath le ServiceLoader lié aux Drivers fait tout auto-magiquement. (pour comprendre comment ça marche voir la doc de ServiceLoader).

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut class forname
    Bonjour et merci de vos réponses qui m'ont bien aidée.

    Pouvez-vous m'aider à répondre à cette question de mon message
    Ensuite, concernant le role du driver jdbc:odbc, si je comprends bien, son rôle consiste à traduire les commandes java dans un langage compris par le SGBDR Access: de quelles commandes java s'agit-il?
    Si je m'en tiens aux requêtes SQL intégrées à l'application java telles que l'on peut le voir dans le code ci-dessous,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ConnexionSQL = DriverManager.getConnection("jdbc:odbc:bdd_clients","","");
    			//ConnexionSQL = 		//Connexion à une base de données nommée sur un serveur distant :
     
     
    			  stmt = ConnexionSQL.createStatement();
    			  requete_1 = "select ID_CLI,NOM_CLI,PRENOM_CLI,AD1_CLI,AD2_CLI, AD3_CLI, TYPE_CLI from CLIENTS_PARTICULIERS ;
    Le langage de requêtage SQl est également compris par Access, donc quel type d'instruction a donc besoin de traduire le driver jdbc:odbc.

    Merci encore beaucoup à vous de votre aide.

    Cordialement.
    Nathalie Harbonne

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le driver ne traduit, a priori, rien, il se charge de la connexion. En l'occurence, le driver jdbcodbc "parle" le ODBC et donc peux se connecter aux bases de données ODBC. JDBC défini des méthodes et objets standard pour toute base de données, le driver jdbc/odbc implémente ces méthodes et objet dans une version qui dialogue avec ODBC. De la même manière que le driver Oracle le ferait dans une méthode qui parle le protocole oracle, etc

    Accessoirement, à part pour du prototypage, il n'est par recommandé d'utiliser le pont ODBC / JDBC, il n'est pas d'une qualité "production" et a toujours été fournis par sun à titre de "si vous ne pouvez vraiment pas faire autrement" .

Discussions similaires

  1. Quand est-ce qu'on utilise Class.forName ?
    Par andrianiaina dans le forum Langage
    Réponses: 1
    Dernier message: 21/09/2011, 13h06
  2. Réponses: 3
    Dernier message: 18/04/2009, 23h55
  3. Pourquoi utiliser Class.forName().newInstance()
    Par menzlitsh dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2007, 14h00
  4. [Taglibs] Utiliser les classes css ?
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2007, 01h31
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

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