Problème java.lang.NullPointerException

Problème java.lang.NullPointerException - Java - Programmation

Marsh Posté le 16-06-2009 à 23:15:34    

Bonsoir.
J'ai créé un programme qui me permet de me connecter à une base de donnée.
J'ai un fichier main et deux classes ConnexionBD et Salle. Sauf que j'ai une erreur  
Exception in thread "main" java.lang.NullPointerException
        at projetjava.Salle.insererSalle(Salle.java:13)
        at projetjava.Main.main(Main.java:9)
 
Voilà les codes:
main.java

Code :
  1. package projetjava;
  2. public class Main {
  3.     public static void main(String[] args) {
  4.         ConnexionBD connex = new ConnexionBD();
  5.         connex.ouvrirConnexion();
  6.         Salle salle = new Salle();
  7.         salle.insererSalle("Salle 2" );
  8.         connex.fermerConnexion();
  9.     }
  10. }


 
ConnexionBD.java

Code :
  1. package projetjava;
  2. import java.sql.*;
  3. public class ConnexionBD {
  4.    
  5.     private Connection connection;
  6.     public void ouvrirConnexion() {
  7.         try {
  8.             // Chargement du Driver JDBC MySQL
  9.             Class.forName("com.mysql.jdbc.Driver" );
  10.             // Definition des parametres de l'URL de connexion
  11.             String serveur = "localhost";
  12.             String port = "3306"; // 3306 est le port par defaut pour MySQL
  13.             String bdd = "projetjava";
  14.             String url = "jdbc:mysql://" + serveur + ":" + port + "/" + bdd;
  15.             // Utilisateur et mot de passe de connexion
  16.             String user = "yus";
  17.             String password = null;
  18.             // Connexion avec la base de donnees
  19.             connection = DriverManager.getConnection(url, user, password);
  20.             System.out.println("Connexion ouverte !" );
  21.         } catch (SQLException ex) {
  22.             System.err.println("Erreur lors de la connexion a la base de donnees !" );
  23.             ex.printStackTrace();
  24.         } catch (ClassNotFoundException ex) {
  25.             System.err.println("Erreur de chargement du Driver JDBC !" );
  26.             ex.printStackTrace();
  27.         }
  28.     }
  29.     public void fermerConnexion() {
  30.         try {
  31.             // Si la connexion n'est pas deja fermee
  32.             if (!connection.isClosed()) {
  33.                 // Fermeture de la connexion
  34.                 connection.close();
  35.                 System.out.println("Connexion fermee !" );
  36.             }
  37.         } catch (SQLException ex) {
  38.             System.err.println("Erreur lors de la fermeture de la connexion !" );
  39.             ex.printStackTrace();
  40.         }
  41.     }
  42. }


 
Salle.java
 

Code :
  1. package projetjava;
  2. import java.sql.*;
  3. public class Salle {
  4.     private Connection connection;
  5.     public void insererSalle(String desc_salle) {
  6.         try {
  7.             // Requete d'insertion dans la table Partiels
  8.             String query = "INSERT INTO salle(desc_salle) VALUES ('" + desc_salle + "')";
  9.             // Ouverture d'une session avec la base de donnees
  10.             Statement st = connection.createStatement();
  11.             // Execution de la requete SQL
  12.             st.executeUpdate(query);
  13.             // Fermeture de la session
  14.             st.close();
  15.             System.out.println("Insertion effectuee !" );
  16.         } catch (SQLException ex) {
  17.             System.err.println("Erreur lors de l'insertion d'un nouveau partiel !" );
  18.             ex.printStackTrace();
  19.         }
  20.     }
  21. }


 
Je comprend pas pourquoi je n'arrive pas à mettre ma base à jour.
 
Merci d'avance à tous.
 
 
 

Reply

Marsh Posté le 16-06-2009 à 23:15:34   

Reply

Marsh Posté le 16-06-2009 à 23:45:25    

salut,
 
déja, je me permet une remarque: tu écris connexion un coup en francais avec un "x", un coup en anglais avec "ct", essaie d'harmoniser tu vas t'y perdre...
 
ensuite en ce qui concerne ton pb, d'un point de vue POO il ya un pb de conception. tu utilise dans la classe Salle un objet connection qui n'est pas initialisé car en fait il l'est dans la classe ConnexionBD. je te conseille de te repencher sur la conception de ton appli...

Reply

Marsh Posté le 16-06-2009 à 23:52:37    

Merci, je vais revoir pour le connexion c'est vrai que ce n'est pas clair.
J'aimerais séparer la connexion à la base de donnée et la connexion pour mettre une table à jour. Comment puis-je faire alors?

Reply

Marsh Posté le 17-06-2009 à 09:28:04    

Pattern Singleton pour ConnexionBD déjà (pour éviter d'ouvrir plusieus connexions en même temps) avec dedans une méthode statique getInstance pour retourner l'instance unique de ConnexionBD. Et tu fais un getter pour connection. Ainsi tu y accèdes n'importe où en faisant ConnexionBD.getInstance.getConnection()

Reply

Marsh Posté le 17-06-2009 à 13:06:56    

C'est du chinois pour moi, je débute en Java!

Reply

Marsh Posté le 17-06-2009 à 13:12:15    

Deamon a écrit :

Pattern Singleton pour ConnexionBD


[:moouh]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-06-2009 à 13:16:22    

Désolé. ;)
 
Regarde sur le net le pattern singleton et met le en place pour ConnexionDB (il existe des codes exemples tout fait en Java).
Une fois ça fait à chaque fois que tu veux créer une ConnexionDB tu ne pourras pas faire new ConnexionDB() mais l'appel d'une méthode static du genre getInstance(). Donc concrètement il faudra faire ConnexionDB.getInstance() au lieu du new ConnexionDB().
 
Ensuite dans ConnexionDB  tu mets une méthode getConnexion() qui fait juste "return connexion". C'est ce qu'on appelle un getter.
 
Avec ça pour accéder à la connexion il faudra faire ConnexionDB.getInstance().getConnexion()
 
C'est plus clair ?
 
 


Quoi [:moouh] ?  :o

Message cité 1 fois
Message édité par Deamon le 17-06-2009 à 13:17:11
Reply

Marsh Posté le 17-06-2009 à 13:19:31    


http://steve.yegge.googlepages.com [...] red-stupid

 

Surtout qu'ici ça sert vraiment à rien du tout, tu pourrais tout aussi bien faire un DBConnection.getConnection() et ça se démerde tout seul.

 

Ou encore mieux, DB.execute() à laquelle tu filles tes opérations (tu crées l'interface qui va bien comme ça il devient possible d'utiliser une classe anonyme si besoin) et qui les exécute dans le contexte de la DB (et pourquoi pas dans une transaction avec nettoyages en cas de besoin toussa)


Message édité par masklinn le 17-06-2009 à 13:34:05

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed