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