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 :

Passer les paramètres de connexion à un singleton


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Par défaut Passer les paramètres de connexion à un singleton
    Bonjour à tous,
    voilà, j'utilise un singleton pour la connexion à une bdd oracle et il y a plusieurs utilisateurs chacun avec son mot de passe, donc comment passer les paramètres (url,user,pass) au singleton? à noter que même l'url peut changer selon l'@ du pc où se trouve la bdd.
    merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    S'il s'agit d'une application desktop, chaque poste exécute l'application indépendamment et il n'y a qu'un singleton par poste totalement indépendant des autres ...
    Chaque utilisateur peut donc s'identifier sans perturber les autres.
    où se situe le problème ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre expérimenté Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    S'il s'agit d'une application desktop, chaque poste exécute l'application indépendamment et il n'y a qu'un singleton par poste totalement indépendant des autres ...
    Chaque utilisateur peut donc s'identifier sans perturber les autres.
    oui c'est exactement ça, actuellement j'utilise le singleton comme ceci:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
     
    public class Connexion{
     
    	/**
             * URL de connection
             */
    	private String url = "jdbc:oracle:thin:@localhost:1521:MaBase";
    	/**
             * Nom du user
             */
    	private String user = "user1";
    	/**
             * Mot de passe du user
             */
    	private String passwd = "pass1";
    	/**
             * Objet Connection
             */
    	private static Connection connect;
     
    	/**
             * Constructeur privé
             */
    	private Connexion(){
    		try {
                        Class.forName("oracle.jdbc.driver.OracleDriver");
    		    connect = DriverManager.getConnection(url, user, passwd);
     
    		} 
                    catch(Exception e){
                    if(!(e.fillInStackTrace().equals(null))){
                    new Erreur(e.fillInStackTrace().toString()).setVisible(true);
                }
             }
     
    	}
     
    	/**
             * Méthode qui va nous retourner notre instance
             * et la créer si elle n'existe pas...
             * @return
             */
    	public static Connection getInstance(){
     
    		if(connect == null){
     
    			new Connexion();
    		}
    		return connect;	
    	}	
    }
    et je fait appel au singleton au démarrage de l'application dans ma fenêtre principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection con=Connexion.getInstance();
    le premier problème c'est que "localhost" peut changer selon le pc où se trouve la bdd donc j'aimerais pouvoir configurer l'@ au démarrage, ensuite je voudrais savoir qui a fait quoi sur certaines tables donc je vais devoir ajouter une colonne id_user sur chacune de ces table,donc chaque utilisateur dois s'identifier au début.
    ça veut dire que les variable:url,user et passwd doivent être affectées de l'extérieur du singleton ,n'est-ce pas?
    voilà c'est là que je bloque.
    merci pour votre intérêt.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    localhost = le poste sur lequel l'application est exécutée.
    Ce qui veut dire que, tel que c'est programmé, l'application va chercher une base sur son propre poste.
    Alors qu'en fait la base est sur un serveur (ou un poste) partagé ?
    Si c'est le cas, l'url devrait avoir comme syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String url = "jdbc:oracle:thin:@//192.xx.xx.xx:1521:MaBase";
    avec 192.xx.xx.xx qui serait l'adresse IP de la machine qui héberge la base Oracle

    user et passwd doivent être affectées de l'extérieur du singleton ,n'est-ce pas
    oui, l'utilisateur doit taper son login et mot de passe que tu récupères pour renseigner ton singleton
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre expérimenté Avatar de kalina
    Femme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 220
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    localhost = le poste sur lequel l'application est exécutée.
    Ce qui veut dire que, tel que c'est programmé, l'application va chercher une base sur son propre poste.
    Alors qu'en fait la base est sur un serveur (ou un poste) partagé ?
    Si c'est le cas, l'url devrait avoir comme syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String url = "jdbc:oracle:thin:@//192.xx.xx.xx:1521:MaBase";
    avec 192.xx.xx.xx qui serait l'adresse IP de la machine qui héberge la base Oracle
    la bdd est sur un poste partagé, la dessus il n'y a pas de problème
    Citation Envoyé par Népomucène Voir le message
    oui, l'utilisateur doit taper son login et mot de passe que tu récupères pour renseigner ton singleton
    et alors comment renseigner mon singleton c'est ça le but de mon post!
    en les passant comme paramètres à getInstance()? je trouve ça tellement moche! comment régler ça sans sortir de l'idée du singleton?

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Il faut ajouter une méthode setLogin.
    Cela donne :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class Connexion {
    
        public void setLogin(String user, String passwd) {
            this.user = user;
            this.passwd = passwd;
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                connect = DriverManager.getConnection(url, user, passwd);
    
            } catch (Exception e) {
                if (!(e.fillInStackTrace().equals(null))) {
                    new Erreur(e.fillInStackTrace().toString()).setVisible(true);
                }
            }
        }
    
        /**
         * URL de connection
         */
        private String url = "jdbc:oracle:thin:@localhost:1521:MaBase";
        /**
         * Nom du user
         */
        private String user;
        /**
         * Mot de passe du user
         */
        private String passwd;
        /**
         * Objet Connection
         */
        private static Connection connect;
        /**
         * Constructeur privé
         */
        private Connexion() {
        }
    
        /**
         * Méthode qui va nous retourner notre instance et la créer si elle n'existe
         * pas...
         *
         * @return
         */
        public static Connection getInstance() {
    
            if (connect == null) {
    
                new Connexion();
            }
            return connect;
    
        }
    
    }
    Après, quand tu lances ton application, tu demandes à l'utilisateur son login et mot de passe AVANT d'utiliser ta classe Connexion
    du coup, pour alimenter ton singleton, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Connexion connexion = Connexion.getInstance();
    connexion.setLogin(user, passwd);
    après, comme à chaque appel de Connexion.getInstance() la variable connect n'est pas null, ça va utiliser le connect en cours et la règle du singleton est respectée.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

Discussions similaires

  1. Externaliser les paramètres de connexion à la base ?
    Par Bobsinglar dans le forum Struts 2
    Réponses: 4
    Dernier message: 30/11/2007, 11h03
  2. passer les paramètres d'un formulaire
    Par techtonyc dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 24/04/2007, 13h58
  3. [D7 - ADO]Tester les paramètres de connexion
    Par portu dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/04/2007, 19h29
  4. Réponses: 2
    Dernier message: 20/10/2006, 08h23
  5. Cacher les paramètres de connexion à la BD
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/10/2006, 17h04

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