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 :

[Mysql][JDBC] Votre avis !


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 15
    Points
    15
    Par défaut [Mysql][JDBC] Votre avis !
    Bonjour,

    J'ai réalisé un programme et je voudrais savoir si l'utisation de mon driver JDBC est correcte, et mes accès à la base de données sont bons !?
    Ma question pour être plus précis est de savoir si le fait de :

    - créer une connexion
    - Exécuter ma requête
    - fermer ma connexion
    - recréer ma connexion
    - Exécuter une autre requête
    - refermer la connexion
    - ainsi de suite .....

    Est ce que cela ne pose aucun problème.?
    Est-ce que vous faites comme ça?
    Et dans le cas où vous faites comme ça, est ce que sous windows ça pose un problème lorsque que l'on fait beaucoup d'accés à la Bdd en peu de temps (comme par exemple une erreur de connexion à la socket ?)


    Voilà comment j'ai fait :

    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
     
     
    public class GestionCompte extends JDialog{
    	private Compte compte = null;
    	private static GestionCompte instance = null;
    	private BaseDeDonnees bdd = new BaseDeDonnees();
     
    	private GestionCompte()
    	{
    		super();
    	}
     
    	public static GestionCompte getInstance()
    	{
    		if(instance == null)
    			instance = new GestionCompte();
    		return instance;
    	}
     
                      public Compte getCompte(String numCompte)
    	  {
    	  	String requete = "SELECT * "+
    						"FROM Compte "+
    						"WHERE NumCompte = '" + numCompte.replaceAll("'", "''") + "'";
     
    	  	ResultSet rs_Result = bdd.executeRequete(requete);
    	  	if(rs_Result == null)
    		{
    			GestError.getInstance().afficheLastErreur();
    			bdd.closeConnexion();
    			return null;
    		}
    	  	try {
    	  		while(rs_Result.next())
    	  		{
     
    	  			Compte cpt =  getCompte(rs_Result);
    	  			bdd.closeConnexion();
    	  			return cpt;
    	  		}
    	  		//System.out.println(rs_Result.getFetchSize());
    	  	} catch (SQLException e) {
    	  		GestError.afficheErreur(this, e.getMessage(), GestError.INT_ERROR_MSG);
    	  		bdd.closeConnexion();
    	  		return null;
    	  	}
    	  	bdd.closeConnexion();
    	  	return null;
    	  }
    }
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    **********************
               BDD
    ***********************
     
    public BaseDeDonnees ( ) {
     
    		// Paramètres de connexion
      		// Adresse de la machine
      		adresse = getAdresse(); // getadresse() -> renvoie <adresse>:3306
      		nomBdd = "Semdb";
    		// Driver de connexion à la base de données
    		url ="jdbc:mysql://" + adresse + "/" + nomBdd;
    		// login de connexion à la bdd
    		login = "sem";
    		// Mot de passe de connexion
    		password = "sem";
     
    		// Initialisation de l'erreur
    		str_Erreur = null;
     
    		// Etablissement de la connexion
    		try {
    			//Instanciation du driver de connexion à la bdd
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			//Impossible de trouver le driver
    			GestError.afficheErreur(this, e.getMessage(), GestError.INT_ERROR_MSG);
    		}
      }
     
      private static String getAdresse()
      {
      	FileDOM fileDOM = new FileDOM();
      	Document doc = null;
      	try{
      		doc = fileDOM.loadXML("Param/host");
      	}catch(FileNotFoundException fnfe)
    	{
      		GestError.afficheErreur(new MaJDialog(), "Le fichier host n'existe pas !", GestError.INT_INFORM_MSG);
      		return null;
    	}
      	if( doc == null)
    	{
    		return null;
    	}
    	Element root = doc.getRootElement();
     
    	return root.getValue();
      }
     
     /* // Recupère l'instance de la classe
      public static BaseDeDonnees getInstance()
      {
    		if (null == instance) { // Premier appel
    				// on crée l'instance
    				instance = new BaseDeDonnees();
    		}
    		// On renvoie l'instance de la classe
    		return instance;		
      }*/
     
     
    public boolean closeConnexion()
    {
    	try {
    		  if(res!=null){res.close();}
    		  if(st!=null){st.close();}
    		  if(conn!=null){conn.close();}
    		//  System.err.println("Déconnexion");
    	} catch (Exception e) {
    		// TODO Auto-generated catch block
    		GestError.afficheErreur(this, "Impossible de fermer la connexion à la base de données", GestError.INT_ERROR_MSG);
    		return false;
    	}
    	return true;
    }
       /**
       * 
       * @param str_Requete 
       * 
       * Exécute la requête et récupère le résultat sous la forme d'un résultSet
       */
      public ResultSet executeRequete ( String str_Requete) {
    	if(!connexionBdd())
     		return null;
    	try {
    		// executer une requete
    		res = st.executeQuery(str_Requete);
    	} catch (SQLException e) {
    		str_Erreur = "Impossible d'exécuter la requête\nVérifier la syntaxe de la requête!";
    		str_Erreur += e.getMessage();
    		GestError.getInstance().setLastMsgErreur(str_Erreur);
    		System.out.println(str_Erreur);
    	}
     
    	  return res;
      } 
     
     
      public boolean connexionBdd()
      {
      	//Etablissement de la connexion
      	try {
      		//Connexion à la bdd
      		conn = DriverManager.getConnection(url, login, password);
      		//System.err.println("Connexion");
      		//Creation du statement
      		st = conn.createStatement();
      	} catch (SQLException e) {
      		str_Erreur = "Impossible de se connecter à la base de données\n";
      		str_Erreur += "Error :"+e.getMessage()+"\nSi le problème persiste, veuillez contacter l'administrateur...";
      		//System.err.println(str_Erreur);
      		GestError.afficheErreur(this, str_Erreur, GestError.INT_ERROR_MSG);
      		System.exit(-1);
      		return false;
      	}
      	return true;
      }
    }

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    Et bien ça dépend en fait!
    Si tu dois effectuer toute une série de requêtes assez raprochées, je ne préconise pas d'ouvrir et fermer la connexion à chaque requête mais plutôt de l'ouvrir au début et de la fermer quand tu as fini tout ton paquet.
    Si tu as des requêtes très isolées (2~3 minutes min entre chaque requêtes), tu peux ouvrir et fermer une connexion pour tes requêtes.
    Utiliser un pool de connexions est une solution élégante à la question des gestions de connexion.
    Tu ne fais que demander une connexion à ton pool, neuve ou pas, et tu balourdes tes requêtes dessus. Le pool s'occupe de gérer le nombre de connexions ouvertes ainsi que leur durée de vie.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    merci pour ta réponse.

    Donc si j'ai bien compris la solution la plus propre est d'utiliser un pool de connexion ?

    tu me parles de pool de connexions, je ne connais mais je vais faire des recherches. Si tu as des liens à me proposer je ne suis pas contre

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    La bonne vieille javadoc, avec les 2 classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    javax.sql.ConnectionPoolDataSource
    javax.sql.PooledConnection
    Tu récupères un ConnectionPoolDataSource avec ton driver, tu fais getPooledConnection(String user, String password) pour récupérer un PooledConnection, et au lieu de créer une nouvelle Connection pour chaque requête, tu fais getConnection() sur ton PooledConnection, et il s'occupe de tout comme un grand.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Tu récupères un ConnectionPoolDataSource avec ton driver
    Je ne vois pas comment ?

    ConnectionPoolDataSource connectionPoolDataSource = (ConnectionPoolDataSource) Class.forName("com.mysql.jdbc.Driver").newInstance();

    j'ai une erreur de cast ce qui est normal.

    C'est quel driver qu'il faut que je mettes ?

    De plus, à quel moment je lui donne l'URL pour qu'il se connecte à ma bdd ??

    merci

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Est ce que le pool de connexion n'est pas destiné aux utilisations J2EE ??

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

Discussions similaires

  1. Formation PHP/MYSQL votre avis!
    Par stephanech dans le forum Stages
    Réponses: 2
    Dernier message: 02/01/2009, 12h20
  2. [votre Avis] statistiques MySQL
    Par if_zen dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/12/2007, 20h02
  3. votre avis sur jdbc
    Par Zorgz dans le forum JDBC
    Réponses: 1
    Dernier message: 17/05/2006, 11h46
  4. Réponses: 4
    Dernier message: 26/04/2006, 14h36

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