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
>>>
>>
>>
>>
>>
>