Problème java.lang.NullPointerException

yusdingue Messages postés 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 17 juin 2009 - 16 juin 2009 à 23:18
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 17 juin 2009 à 16:32
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

package projetjava;

public class Main {

    public static void main(String[] args) {
        ConnexionBD connex = new ConnexionBD();
        connex.ouvrirConnexion();
        Salle salle = new Salle();
        salle.insererSalle("Salle 2");
        connex.fermerConnexion();

    }

}

ConnexionBD.java

package projetjava;

import java.sql.*;

public class ConnexionBD {
    
    private Connection connection;

    public void ouvrirConnexion() {
        try {
            // Chargement du Driver JDBC MySQL
            Class.forName("com.mysql.jdbc.Driver");

            // Definition des parametres de l'URL de connexion
            String serveur = "localhost";
            String port = "3306"; // 3306 est le port par defaut pour MySQL
            String bdd = "projetjava";
            String url = "jdbc:mysql://" + serveur + ":" + port + "/" + bdd;

            // Utilisateur et mot de passe de connexion
            String user = "yus";
            String password = null;

            // Connexion avec la base de donnees
            connection = DriverManager.getConnection(url, user, password);
            System.out.println("Connexion ouverte !");
        } catch (SQLException ex) {
            System.err.println("Erreur lors de la connexion a la base de donnees !");
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            System.err.println("Erreur de chargement du Driver JDBC !");
            ex.printStackTrace();
        }
    }
    public void fermerConnexion() {
        try {
            // Si la connexion n'est pas deja fermee
            if (!connection.isClosed()) {
                // Fermeture de la connexion
                connection.close();
                System.out.println("Connexion fermee !");
            }
        } catch (SQLException ex) {
            System.err.println("Erreur lors de la fermeture de la connexion !");
            ex.printStackTrace();
        }
    }
}

Salle.java

package projetjava;
import java.sql.*;

public class Salle {

    private Connection connection;

    public void insererSalle(String desc_salle) {
        try {
            // Requete d'insertion dans la table Partiels
            String query = "INSERT INTO salle(desc_salle) VALUES ('" + desc_salle + "')";
            // Ouverture d'une session avec la base de donnees
            Statement st = connection.createStatement();
            // Execution de la requete SQL
            st.executeUpdate(query);
            // Fermeture de la session
            st.close();

            System.out.println("Insertion effectuee !");
        } catch (SQLException ex) {
            System.err.println("Erreur lors de l'insertion d'un nouveau partiel !");
            ex.printStackTrace();
        }
    }
}

Je comprend pas pourquoi je n'arrive pas à mettre ma base à jour.

Merci d'avance à tous.

7 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juin 2009 à 07:30
Salut,

Ton erreur se situe au niveau de la ligne 13 de ta fonction insererSalle, à toi d'y mettre un point d'arrêt et de comprendre pourquoi il y a une variable qui est null à ce moment là.
0
yusdingue Messages postés 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 17 juin 2009
17 juin 2009 à 07:47
Ma ligne treizz correspond à Statement st = connection.createStatement(); Je vois pas du tout le problème...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juin 2009 à 08:26
C'est tout simplement l'objet connection qui n'est pas instancié : il est null !
0
yusdingue Messages postés 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 17 juin 2009
17 juin 2009 à 13:12
Et comment faire pour l'instancier?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juin 2009 à 13:47
C'est une blague ?

Tu l'as déjà fait dans la classe ConnectionBD... il te suffit de faire de même dans ta classe Salle...

Tu comprends le code que tu nous montre là ?
0
yusdingue Messages postés 4 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 17 juin 2009
17 juin 2009 à 16:23
Non je vois ce que tu veux dire mais pourquoi le faire une deuxième fois?
Le lien entre les deux ne peut pas s'effectuer?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juin 2009 à 16:32
Aïe, aïe, aïe, je te conseille d'apprendre le java avant de te lancer dans la programmation avec java, sinon tu vas droit dans le mur !

la variable connection de ta classe Salle est différente de celle de la classe ConnexionBD.

Tu n'es bien entendu pas obligé d'ouvrir à chaque fois ta base de données pour exécuter une requête (encore heureux, car sinon, niveau performance ca s'écroulerait !), mais il te faut exécuter les requêtes par ta classe ConnectionBD et non par ta classe Salle, c'est tout.
0
Rejoignez-nous