IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

insérer des données dans bdd : null pointer exception


Sujet :

JavaFX

  1. #1
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut insérer des données dans bdd : null pointer exception
    Bonjour;

    je souhaite insérer quelques données dans ma table, j'ai créé cette méthode que j'ai relié avec le bouton de sauvegarde et une autre pour remplir le tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    public class SystemeController implements Initializable {
     
    ... //déclarations des composants fxml 
    private Conn conn ; //instanciation de la classe de connection
    private Connection cnx = conn.Connect(); //appel méthode de connection
    private PreparedStatement ps;
    private ResultSet rs;
     
    @Override
        public void initialize(URL url, ResourceBundle rb) {
            try {
                getSys();
            } catch (SQLException ex) {
                Logger.getLogger(SystemeController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
    public void getSys() throws SQLException {
     
     
            String query = "SELECT * FROM systeme";
            try {
                list = FXCollections.observableArrayList();
     
     
                ps = cnx.prepareStatement(query);
                rs = ps.executeQuery();
                while (rs.next()) {
                    list.add(new sysModel(rs.getString(1), rs.getString(2), rs.getString(3)));
                }
            } catch (Exception e) {
                System.err.println("Error" + e);
     
     
            } 
            idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
            sysCol.setCellValueFactory(new PropertyValueFactory<>("sys"));
            descCol.setCellValueFactory(new PropertyValueFactory<>("desc"));
            sysTable.setItems(null);
            sysTable.setItems(list);
        }
     
        //méthode de sauvegarde qui génère l'erreur 
        public void insertSys() throws SQLException {
            String query = "INSERT INTO systeme(sys,description) VALUES(?,?)";
            try {
     
                ps = cnx.prepareStatement(query);
                ps.setString(1, txtSys.getText());
                ps.setString(2, txtDesc.getText());
     
     
                ps.executeUpdate();
     
     
            } catch (Exception e) {
                System.err.println("Error" + e);
     
     
            } finally {
                ps.close();
                rs.close();
            }
        }
     
     
     
    }//hint ici
    à la fin de ma classe j'ai ce hint "invalid method declaration"
    et quand j'exécute le bouton de sauvegarde je reçoit cette erreur "Caused by: java.lang.NullPointerException" et il pointe vers le ps.close()

    comment résoudre ça je vous prie.
    merci

  2. #2
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    Je pense que le problème vient du rs.close(). essayer de la supprimer et voir si çà résout le problème.
    je te propose aussi d’utiliser The try-with-resources Statement introduit en java 7.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    public void insertSys() throws SQLException {
            String query = "INSERT INTO systeme(sys,description) VALUES(?,?)";
            try ( ps = cnx.prepareStatement(query)){
                   ps.setString(1, txtSys.getText());
                   ps.setString(2, txtDesc.getText()); 
                   ps.executeUpdate();
     
     
            } catch (Exception e) {
                System.err.println("Error" + e);
     
     
            } 
        }

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par Hind4Dev Voir le message
    et quand j'exécute le bouton de sauvegarde je reçoit cette erreur "Caused by: java.lang.NullPointerException" et il pointe vers le ps.close()
    Cette erreur indique clairement que ps est null et donc soit qu'il n'a pas encore été initialisé soit que tu l'as déjà libéré lorsque tu essaies d'invoquer sa méthode close() et donc que tu dois avoir une erreur de logique dans ton programme sur la manière dont tu gères ton Statement.

    Enfin la méthode suggérée par win_ubuntu fait partie des bonnes pratiques a suivre post-JDK7 comme ça plus de close() a gérer manuellement. Par contre si après tu as encore une NullPointerException sur ps c'est que ton soucis de logique persiste.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    l'erreur est dans la connexion à la base, voilà ce que j'ai eu

    java.sql.SQLException: No suitable driver found for jdbc:mysql:bdd/clouding.sql
    Errorjava.lang.NullPointerException
    alors en faite, j'ai créé ma base sous mysql (en xampp) et je l'ai exporté en fichier .sql afin d'avoir une bdd intégrée dans le répertoire du projet (non sous serveur)

    voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Conn {    
        public static Connection Connect(){
     
            java.sql.Connection cnx = null;
     
     
            try {
                Class.forName("com.mysql.jdbc.Driver");
                cnx = DriverManager.getConnection("jdbc:mysql:bdd/clouding.sql");
     
            } catch (Exception e) {
                System.out.println(e);
            }
            return cnx;
        }
    }
    est ce qu'il reffuse que je fais celà ? en sachant que le driver que j'ai ajouté est celui de mysql jdbc

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    salut,

    je dis peut être une connerie mais mysql ne fonctionne que par serveur non? (faut un serveur mysql qui tourne)
    la fonction d'export en fichier sql permet juste de transférer facilement sa bdd en important le fichier dans un autre serveur/ sgbd.

    pour utiliser un fichier local comme bdd, t'as sqlite ou derby il me semble

  6. #6
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    je croix que t'avais raison, quand je me suis connectée à la même base sur serveur tout a bien fonctionné, pourriez vous m’orienter comment se connecter à une base intégré - je veux la même base que j'ai sur serveur mais intégrée à la fin du projet -
    merci

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    salut,

    du coup pour les bases locale comme dis au dessus le plus connu est surement sqlite, sinon tu as derby.

    c'est le même principe que pour mysql, tu charge le driver et tu te connecte comme si c’était un serveur sauf que c'est sur un fichier.

    le driver pour sqlite : https://bitbucket.org/xerial/sqlite-jdbc
    celui pour derby : https://db.apache.org/derby/quick_start.html

    après pour crée ta base de donnée, si tu utilise netbean ou autre ide il me semble que tu as des plugin pour gérer les base de donnée intégré (j'utilise InteliJ, mais il me semble que netbean le fait aussi et surement eclipse aussi)
    sqlite a plusieurs logiciels qui permette de faire comme phpmyadmin , derby je ne sais pas,
    par exemple : http://www.sqliteexpert.com/ (la version personnal est gratuite)

    sinon tu peux le faire depuis java avec les requêtes sql. (CREATE TABLE etc...)

  8. #8
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insérer des données dans un tableau lors d'une boucle
    Par sissi25 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/05/2007, 09h19
  2. Insérer des données dans une BD depuis un fichier .bat
    Par kurkaine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/11/2006, 08h31
  3. [VB.Net] Comment insérer des données dans des tables ?
    Par shakoulé dans le forum Accès aux données
    Réponses: 2
    Dernier message: 23/09/2006, 21h46
  4. Réponses: 26
    Dernier message: 01/07/2006, 13h14
  5. Insérer des données dans ma BDD
    Par griese dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 28/06/2006, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo