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
>