Ce n'est pas grave sur le m�me mod�le tu ne fais pas la connection dans 
le constructeur mais tu fournis deux m�thodes connect(user, pass) et 
disconnect. Si l'utilisateur appel getConnection() alors que la 
connexion n'est pas ouverte tu lances une exception.

public void connect(String user, String pass)  throws SQLException  {
....
}

public void disconnect()  throws SQLExeption  {
...
}

public Connection getConnection()   throws NoConnectionAvailableException {
 ...
}

Autre remarque : souvent il n'est pas tr�s judicieux de catcher des 
exceptions dans une m�thode sans les remonter surtout sur ce type de 
composant. Si il y a un pb lors de la connexion la classe qui r�alise 
l'appel ne le sait pas.

Philippe Delrieu
Cybernomade

Aur�lien Mazurie wrote:

>
> En fait l'utilisateur doit pouvoir se d�connecter de la base en cours 
> pour se reconnecter � une autre (par contre il n'est pas possible 
> d'avoir deux connections simultan�es). Donc la variable "conn" ne doit 
> pas �tre fig�e.
>
> Aur�lien
>
> Le mardi 28 mai 2002, � 02:31 , Philippe Delrieu a �crit :
>
>> D'une mani�re g�n�rale lorsque l'on veut partager une ressource ou 
>> une variable entre plusieurs instances de classes et �tre s�re que la 
>> ressource ne sera initialis�e qu'une fois (c'est souvent le cas avec 
>> les connexion aux bases de donn�es) il faut utiliser le pattern 
>> singleton. Ce pattern garanti la cr�ation unique d'une classe et son 
>> partage parmis les autres. Le mod�le dans ton cas peut �tre le suivant :
>>
>> public ConnectionManager     {
>>    private staitc ConnectionManager    manager;
>>    private Connection conn;
>>
>>    private ConnectionManager ()    {
>>        try { Class.forName("org.gjt.mm.mysql.Driver"); }
>>            catch (java.lang.ClassNotFoundException e)
>>         {             System.err.println(" Erreur 
>> ClassNotFoundException: ");
>>          System.err.println(" " + e.getMessage());
>>     }
>>
>>    try { conn = DriverManager.getConnection("jdbc:mysql:///mabase", 
>> "", ""); }
>>    catch (SQLException ex)
>>     {
>>      System.err.println(" Erreur SQLException:");
>>      System.err.println(" " + ex.getLocalizedMessage() + "\n (erreur 
>> " + ex.getErrorCode() + ")");
>>     }     }
>>
>>    public static ConnectionManager  getManager()    {
>>        if (manager == null)    {              synchronized 
>> (ConnectionManager )    {
>>                if (manager == null)    {
>>                    manager = new ConnectionManager ();                }
>>            }
>>        }
>>    }
>>
>>    public Connection getConnection()    {
>>        return conn;
>>    }
>> }
>>
>> Pour le user / password tu peux utiliser des properties ou 
>> pr�-initialiser la classe avec les bonnes valeurs.
>>
>> Pour avoir ta connexion tu utilises la ligne suiivante :
>> Connection conn = ConnectionManager.getManager().getConnection();
>>
>> La connexion n'est cr��e qu'une seule fois et partager par toutes les 
>> classes.
>> Autres remarques : pour les acces aux bases de donn�es il vaut mieux 
>> utiliser un gestionnaire de connexion qui cr��e et lib�re les 
>> connexions d'une mani�re plus transparente.
>>
>> Philippe Delrieu
>> Cybernomade
>>
>> Sebastien Cesbron wrote:
>>
>>> Le probl�me c'est que tu utilises conn qui n'est pas static dans des 
>>> m�thodes static.
>>> Tu as deux solutions pour r�soudre ton probl�me
>>>
>>> - tu ne mets pas ta m�thode doMySQLconnection static
>>> - tu veux absolument la mettre static. Dans ce cas tu utilises une 
>>> variable locale � la m�thode et tu retournes une Connection et tu 
>>> l'utiliseras dans ton code en faisant conn = doMySQLconnection(...)
>>>
>>> Seb
>>>
>>> Aur�lien Mazurie wrote:
>>>
>>>>
>>>> Grrr... Je d�sesp�re de trouver une r�ponse � un probl�me tout 
>>>> simple, d� au fait que je d�bute en Java... Je suis s�r que vous 
>>>> allez trouver �a simplissime:
>>>> J'ai une classe principale qui contient des variables qui seront 
>>>> utilis�es par toutes les classes filles appell�es (ces classes 
>>>> correspondent � des formulaires, des bo�tes de dialogues, etc.). 
>>>> Ces variables sont appell�es � changer (par exemple: la classe m�re 
>>>> contient une variable indiquant le nombre de fen�tres ouvertes, et 
>>>> chaque classe fille doit y acc�der pour pouvoir l'incr�menter ou la 
>>>> d�cr�menter).
>>>> Le probl�me est que le compilateur me sort toujours des choses 
>>>> comme "il faut que votre variable soit d�clar�e comme statique pour 
>>>> �tre appell�e". P�nible ! Je ne veux pas de variable statique...
>>>>
>>>> Vous avez ci-dessous un extrait de mon code: je veux "partager" la 
>>>> variable conn entre toutes les classes filles appell�es � partir de 
>>>> la classe m�re MainFrame (qui est elle m�me appell�e par la class 
>>>> principale du programme). J'ai lu quelque part que l'on ne pouvait 
>>>> pas le faire directement, donc j'ai cr�� dans la classe appelante 
>>>> (MainFrame) une fonction "getConnection" qui renvoie la valeur de 
>>>> conn (et "doMySQLconnection" qui la d�finie). A ce stade, pfff... 
>>>> J'ai tout essay�. Si je ne d�clare pas les fonctions comme 
>>>> statiques, dans les classes filles j'ai un message "A reference to 
>>>> an instance of class MainFrame is required to access this non 
>>>> static member of it" lorsque j'essaye de les appeller (par le biais 
>>>> d'un "autre_conn = MainFrame.getConnection()")... Si je les d�clare 
>>>> comme statiques, comme ci-dessous, j'ai le m�me probl�me avec la 
>>>> variable conn... Snif ! Je veux bien indiquer une instance active 
>>>> de MainFrame, mais comment on fait �a ?
>>>>
>>>>     Aur�lien Mazurie
>>>>
>>>> public class MainFrame extends JFrame
>>>>  {
>>>>   // Acces a la base MySQL
>>>>   private Connection conn;
>>>>
>>>>   public static void doMySQLconnection (String host, String user, 
>>>> String password)
>>>>    {
>>>>     try { Class.forName("org.gjt.mm.mysql.Driver"); }
>>>>     catch (java.lang.ClassNotFoundException e)
>>>>      {
>>>>       System.err.println(" Erreur ClassNotFoundException: ");
>>>>       System.err.println(" " + e.getMessage());
>>>>      }
>>>>
>>>>     try { conn = 
>>>> DriverManager.getConnection("jdbc:mysql:///mabase", "", ""); }
>>>>     catch (SQLException ex)
>>>>      {
>>>>       System.err.println(" Erreur SQLException:");
>>>>       System.err.println(" " + ex.getLocalizedMessage() + "\n 
>>>> (erreur " + ex.getErrorCode() + ")");
>>>>      }
>>>>    }
>>>>
>>>>   public static Connection getConnection ()
>>>>    {
>>>>     return conn;
>>>>    }
>>>>
>>>>  ...
>>>>
>>>>
>>>
>>>
>>>
>>> ______________________________________________________________________________ 
>>>
>>> ifrance.com, l'email gratuit le plus complet de l'Internet !
>>> vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
>>> http://www.ifrance.com/_reloc/email.emailif
>>>
>>
>>
>>
>>
>



Répondre à