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

Java Discussion :

Gestion des connexions à une base de données


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 160
    Points : 89
    Points
    89
    Par défaut Gestion des connexions à une base de données
    Bonjour,

    J'aimerais savoir quelle est la meilleur façon de gérer ses connexions à une base de donnée pour une appli WEB.

    En gros, je fesait jusqu'a présent:
    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
     
    public TypeDEtablissement(int idTypeEtab) throws SQLException {
    		try {
    			connex = ConnexionBase.openConnex();
    			ResultSet rs = null;
    			String requete = "select * from dbo.TYPE_ETABLISSEMENT where TET_ID=?";
    			PreparedStatement stmt = connex.prepareStatement(requete);
    			stmt.setInt(1, idTypeEtab);
    			rs = stmt.executeQuery();
    			while (rs.next()){
    				this.setLibel(rs.getString("TET_LIBEL"));
    				this.setId(rs.getInt("TET_CODE"));
    			}
    			connex.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			connex.close();
    		}
    	}
    Le problème est que lorsque j'ai des requêtes récursives, Ça prend un temps fou à s'exécuter du aux ouvertures / fermetures incessantes de la connexion. Du coup je me suis dit qu'il fallait fermer la connexion juste après l'exécution de toute les requêtes mais c'est assez pénible a gérer.
    Ma question: Est-ce un problème d'ouvrir sa connexion des le lancement de l'application et ne jamais la fermé ? Selon vous, quelle est la meilleur façon de faire?

    Merci

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 67
    Points
    67
    Par défaut
    la solution de est de creé une classe Singleton là où t'instancie la connexion à la base de donner. Avec le design pattern Singleton tu garanti l'instanciation unique de ton objet.

    Pour voir un exemple : http://en.wikipedia.org/wiki/Singleton_pattern

    bon courage

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il faut surtout utiliser un pool de connexions.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Merci pour vos réponses.
    Voici la méthode me permettant de me connecter:
    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
     
    	public static Connection openConnex(){
    		try {
    			if(connex==null){
    				com.microsoft.sqlserver.jdbc.SQLServerDataSource ds = new com.microsoft.sqlserver.jdbc.SQLServerDataSource();
    	    	    ds.setServerName("192.168.5.240");
    	    	    ds.setPortNumber(1433);
    	    	    ds.setDatabaseName("maBase");
    	    	    ds.setUser("***");
    	    	    ds.setPassword("***");
    				connex = ds.getConnection();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return connex; 
        }
    On m'a aussi recommandé sur ce forum de remplacé tout ca par
    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
     
    	public static Connection openConnex() throws ClassNotFoundException{
    		try {
    			System.out.println("qsd");
    			if(connex==null){
    			 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
     
    			 String connectionUrl = "jdbc:sqlserver://192.168.5.240:1433;" +
    			    "databaseName=maBase;user=***;password=***;";
    			 connex = DriverManager.getConnection(connectionUrl);
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return connex; 
        }
    Quelle est la différence d'un point de vue fonctionnel entre les deux?

    Encore merci.

Discussions similaires

  1. Gestion des accès à une base de données & retry
    Par GasparOff dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 12/03/2014, 12h47
  2. Réponses: 4
    Dernier message: 31/03/2011, 10h49
  3. Gestion des connexions à la base de données
    Par DoubleU dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 04/07/2008, 15h04
  4. Réponses: 2
    Dernier message: 04/05/2007, 15h13
  5. Gestion des accès à une base de données
    Par white_tiger dans le forum Sécurité
    Réponses: 7
    Dernier message: 07/02/2007, 00h39

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