Rechercher : dans
Par :

Java : Connection Mysql vers une autre class

Dernière réponse le 2 jun 2009 à 17:09:41 madeinloveyou, le 6 mai 2009 à 13:33:09 
 Signaler ce message aux modérateurs

Bonjour,

Je suis en train de faire une application Java. J'ai créer une connection Mysql dans une class : ConnectionMySQL, je me connect bien !!
Mon probleme est que dans la fonction getConnection qui retourn la Connection, celle-ci est null ???
Comme si l'affectation se fesai en local mais pas d'impact sur la variable globale ???
Voici le code :

...
private java.sql.Connection con;
...

public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
if(source == valid){
con = connect2MySQL(login.getText(),password.getText());
// ici la connection est non null
}
}

public java.sql.Connection getConnection() {
// MAIS ICI LA CONNECTION EST NULL...... POURQUOI ????
return con;
}

public Connection connect2MySQL(String u, String p) {
String user = u;
String pass = p;

try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/",user,pass);
this.dispose();
return con;
} catch(Exception e){
String s = e.getMessage();
JOptionPane.showMessageDialog(null, s, "Connection Error", JOptionPane.ERROR_MESSAGE);
return null;
}
}


Aidez-moi s'il vous plait .... c'est hyper urgent .... je suis coincée !!!!!!!!!!!!!!!!


Merci d'avance.

Configuration: Linux
Epiphany 2.14

Meilleures réponses pour « Java : Connection Mysql vers une autre class » dans :
Eviter d'être bloqué en cas d'erreur TOO MANY CONNECTIONS VoirPar défaut, Mysql autorise 100 connexions (150 depuis la version 5.1) au serveur ... Cela signifie que le 101ème utilisateur recevra le message d'erreur "too many connections" ... Si cela vous arrive, quelqu'en soit la raison (site web trop...
Connexion à la base de données avec JDBC VoirConnexion à la base de données L'API (Application Programming Interface) JDBC, c'est-à-dire la bibliothèque de classes JDBC, se charge de trois étapes indispensables à la connexion à une base de données : la création d'une connexion à la...
Java - L'API JDBC VoirIntroduction à JDBC La technologie JDBC (Java DataBase Connectivity) est un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données (SGBD). L'accès aux bases de données avec...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...

1

sandul, le 6 mai 2009 à 13:45:46

Salut,

Tu appelles probablement getConnection() avant d'appeler une première fois connect2MySQL(), non ?

++

Répondre à sandul

2

sandul, le 6 mai 2009 à 13:48:21

En fait, je réécrirais getConnection() genre

public java.sql.Connection getConnection() {
  if (con == null) {
    // ici le code de connect2MySQL
  }
return con;
}
et du coup le code est plus clair et connect2MySQL() devient inutile...

++

Répondre à sandul

3

madeinloveyou, le 6 mai 2009 à 14:32:20

Ok merci pour la rapidité de la réponse , je v essayer !!

Répondre à madeinloveyou

4

madeinloveyou, le 6 mai 2009 à 14:35:17

Mais le probleme c ke j'utilise onnect2MySQL dans action performed :

public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
if(source == valid){
con = connect2MySQL(login.getText(),password.getText());
}
}
Alors je fais koi dans if(source == valid){ ... ? ... }
j'appell getConnection ??

Répondre à madeinloveyou

5

sandul, le 6 mai 2009 à 14:52:59

Heu, non, pas vraiment... Tu as une boite de dialogue pour rentrer l'utilisateur et le mot de passe, je n'avais pas fait gaffe ==> getConnection() sans paramètres ne saura pas créer la connexion la première fois. Du coup,
1. Ta solution initale peut être OK à condition de t'assurer que connect2MySQL() est appelé avant le premier appel à getConnection()
2. Ou bien de gérer le fait que getConnection() peut te retourner null
3. Ou bien (si tu peux te permettre d'avoir un GUI dans connect2MySQL():

public java.sql.Connection getConnection()) {
  if (con == null) {
    // con à null ==> demander l'user et le password à l'utilisateur
    // via un JOptionPane par exemple
    // Par la suite, le code de connect2MySQL
  }
  return con;
}

M'enfin, il y a plein de possibilités :)

++

Répondre à sandul

6

madeinloveyou, le 6 mai 2009 à 15:04:51

Excuse moi je suis pas super douée ta du le remarqué, et suis un peu tétu !!!
je reste un peu buté sur mon code, je comprend pas pourkoi :
si dans

public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
if(source == valid){
con = connect2MySQL(login.getText(),password.getText());
System.out.println("1==> "+con);
// ICI C PAS NULL
}
}

et dé kon sort de la fonction c null

paske dans 1 otre class (Menu) g :

public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == Connex){
ConnectionMySQL connect = new ConnectionMySQL(); // pour créer la connection
con = connect.getConnection();
// MAI LA DU COUP JE LA RECUPERE PAS !!!!
System.out.println("==> "+con);
}
alors ke la variable con a été déclaré en "global", et non en local !!!!

Répondre à madeinloveyou

7

sandul, le 6 mai 2009 à 15:19:13

J'essaie de redire avec en d'autres mots ce que j'ai dit avant:

Tu as une variable con de type membre de la classe X.
1. con n'est pas déclarée avec "static", donc, une fois"X" instanciée et "con" initialisée, il faudra t'assurer de ne pas appeler "con" d'une autre instance de"X".
Exemple:
x1 = new X();
x1.con = new ConnectionMySQL().getConnection();
// ici x1.con sera != null
x2 = new X();
// ici x2.con sera == null

2. Si ce n'est pas ça ton souci (à savoir, pas de nouvelle instance de X créée), l'unique idée qui me trotte par les méninges est la suivante:

Tu as un endroit dans ton code qui fait appel à "con" et "con" est null. Cela signifie tout simplement que la partie de code qui initialise "con" ne s'est pas encore exécutée.

Il m'est difficile de t'en dire plus, car je ne vois pas très bien dans ton code qui fait quoi et ce que tu veux réaliser =)

++

Répondre à sandul

8

madeinloveyou, le 6 mai 2009 à 15:28:11

Con est déclaré tel kel : private java.sql.Connection con = null;

dans mon interface je clique sur "se connecter à la base de données"
ensuite une fenetre apparait pour rentre login + pass ... je valid
=> ca appel la fonction actionPerformed qui appel connect2MySQL ...
là cette fonction renvoie la connection là ya pas de soucis ... mais après plus rien !!!
pi j'ai kune seule connection !!!

Répondre à madeinloveyou

9

sandul, le 6 mai 2009 à 15:37:26

=> ca appel la fonction actionPerformed qui appel connect2MySQL ...
là cette fonction renvoie la connection là ya pas de souci


1. Cherche dans ton code les occurrences "con = " et assure-toi qu'il n'y a pas d'autre initialisation (pas d'effet de bord)
2. Crée une paire getConnection() et setConnection(). Remplace toutes les utilisations directes de "con" (à part celles dans les méthodes get et set) par des appels à ces deux méthodes. Utilise des breakpoints dans les 2 méthodes pour voir quand "con" est initialisée / accédée / changée.

Good luck,
++

Répondre à sandul

11

madeinloveyou, le 7 mai 2009 à 10:08:33

C'est bon ... j'ai trouvé !!! oufff
en fait, ce qui posait problème c l'ordre des instructions !
mon programme executait :

1: if (source == Connex){
2: ConnectionMySQL connect = new ConnectionMySQL(); // pour créer la connection
3: con = connect.getConnection();

Seulement lorque j'appel getConnection(); je n'ai pas encore tapé le login et mot de pass
Et lors d'une seconde tentative de connection c bon puisque con a été changé à la fin de l'appel d'avant !

Merci de m'avoir eguillé, tte une après pour ça !! les boules !!!

Répondre à madeinloveyou

12

sandul, le 7 mai 2009 à 10:20:55

:-)

heureux de t'avoir aidé

Répondre à sandul

13

madeinloveyou, le 7 mai 2009 à 11:22:02

Mai par contre je c tjs pa commen faire pour tapez une seule fois le mot de pass
paske un while ca me fait beuger le fenetre de connection => peut pas taper login + pwd

???
Connaître les autres, c’est sagesse. Se connaître soi-même, c’est sagesse supérieure. - Imposer sa volonté aux autres, c’est force. Se l’imposer à soi-même, c’est force supérieure.

Répondre à madeinloveyou

14

sandul, le 7 mai 2009 à 11:44:17

Heu... Difficile de dire de que tu souhaites par là (pas d'exemple avec un while dans ton code posté dans ce thread). Poste un code exécutable et complet de préférence (bon, tu élagues les parties inutiles et gardes la partie qui te pose souci).

++

Répondre à sandul

15

madeinloveyou, le 7 mai 2009 à 12:12:25

Public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == Connex){
ConnectionMySQL connect = new ConnectionMySQL();
// ici le programme pass directement à :
connexion = connect.getConnexion();
// ya pas moyen de faire : tant que connect est "ouvert" (kon a pa fait .dispose(); )
// on attend ....(d'avoir login + pass => getConnection qui retourne 1 valeur et non : NULL )
}

getConnection retourn la connection créer dans la class ConnectionMySQL

ça va comme code ?!? Connaître les autres, c’est sagesse. Se connaître soi-même, c’est sagesse supérieure. - Imposer sa volonté aux autres, c’est force. Se l’imposer à soi-même, c’est force supérieure.

Répondre à madeinloveyou

16

sandul, le 7 mai 2009 à 12:17:02

Non, pas trop...

Il n'est pas exécutable (c'est juste un fragment), il n'est pas formaté & je devrais mettre 3 plombes à comprendre de quoi il s'agit. Désolé, mais pas le temps pour ce faire :(

Répondre à sandul

17

 madeinloveyou, le 2 jun 2009 à 17:09:41

Du coup pour faire simple g fait une boite de dialog
avec un JTextField et un JPasswordField
la voici pour ceux que ça intéresse :

public void Connect2BD(){
		String login = null, pwd = null;
		Object[] message = new Object[4];
		message[0] = "Login";
		message[1] = new JTextField();
		message[2] = "Password"; //Message apparaissant dans le corps du dialog
		message[3] = new JPasswordField();

		// Options (nom des boutons)
		String option[] = {"Connection", "Cancel"};

		int result = JOptionPane.showOptionDialog(
			null,message,"Connection to MySQL",
			JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE,
			new ImageIcon("./logo-inra-small.gif"),option,message[1]);

		if(result == 0){
		pwd = ((JPasswordField)message[3]).getText().toString();
		login = (((JTextField)message[1]).getText()).toString();
		connect2MySQL(login,pwd);
		if(!connexion.equals(null)){}
		}
	}

Merci à tous ceux qui répondent à nos questions ;) Connaître les autres, c’est sagesse. Se connaître soi-même, c’est sagesse supérieure. - Imposer sa volonté aux autres, c’est force. Se l’imposer à soi-même, c’est force supérieure.

Répondre à madeinloveyou
Collection CommentÇaMarche.net