Projet [Résolu]

Signaler
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
-
cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
-
Bonjour à toute la communauté de code source, voilà, je développe un projet pour les cours, cela fait plusieurs semaines que je suis occupé à le coder, et là je sèche un petit peu. Ce programme doit interagir avec une base de données pour les opérations standarts ( create,update, delete, show, cependant, je n'arrive pas à trouver l'erreur du code. La connexion à la bdd se passe très bien lorsque je les intègre manuellement, mais lorsque j'essaye de récupéré les informations de mon formulaire (fait avec des JTextField), et les evoyer ensuite vers ma base de données, ccela bloque, mais où et quoi?? ------)mystère.

classe de la fenêtre (partie swing):

fenetre.getContentPane().add(btnBb);


nouvelArticle.setClosable(true);
nouvelArticle.setMaximizable(true);
nouvelArticle.setIconifiable(true);
nouvelArticle.setBounds(10, 11, 286, 238);
nouvelArticle.getContentPane().setLayout(null);

titre2 = new JTextField();
titre2.setBounds(108, 25, 86, 20);
nouvelArticle.getContentPane().add(titre2);
titre2.setColumns(10);

date2 = new JTextField();
date2.setBounds(108, 61, 86, 20);
nouvelArticle.getContentPane().add(date2);
date2.setColumns(10);

fichier2 = new JTextField();
fichier2.setBounds(108, 92, 86, 20);
nouvelArticle.getContentPane().add(fichier2);
fichier2.setColumns(10);

auteur2 = new JTextField();
auteur2.setBounds(108, 123, 86, 20);
nouvelArticle.getContentPane().add(auteur2);
auteur2.setColumns(10);

JButton confirmerArticle = new JButton("Confirmer");
confirmerArticle.setBounds(171, 175, 89, 23);
nouvelArticle.getContentPane().add(confirmerArticle);
confirmerArticle.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String titre = titre2.getText();
String fichier= fichier2.getText();
String auteur= auteur2.getText();
String date = date2.getText();

DAOArticle confirmerLArticle= new DAOArticle(titre, fichier, auteur,date);
Article obj = null;
confirmerLArticle.create(obj);

}


classe DAO connexion:
public class DAOConnexion{

/*
 * Singleton de connexion
 * 
 * 
 * 
 */


private String url = "jdbc:postgresql://localhost:5432/GestionJournal";
private String user = "postgres";
private String passwd = "190707190707";
private static Connection connexion = null;
//Class.forName("org.postgresql.Driver");
// l'objet est static : il n'en n'existe donc qu'un seul exemplaire, quelque soit le nombre d'objet de la classe.


private DAOConnexion(){
//le constructeur fait la connexion, mais il n'est accessible qu'en interne
try {
connexion = DriverManager.getConnection(url, user, passwd);
//connexion = DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace();
}
}

public static Connection getConnexion(){
//l'instanciation active le constructeur
if(connexion == null){
new DAOConnexion();
}
return connexion;	
}	
}


classe DAO Article :
  public boolean create(Article obj) {	
        	
        
        	boolean reponse=false;            
            
        	
            try {
            	Statement state = this.connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            	//Statement state = this.connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
            	            	            	
            	//String requete = "INSERT INTO article(titre, fichier,date,id,auteur) VALUES('"+obj.getTitre()+"','"+obj.getFichier()+"',"+obj.getAuteur()+")";//rajouter variables
            	//String requete = "INSERT INTO article(titre, fichier,date,id,auteur) VALUES('fdfsdgsd','dfsdfsd','cvvdssdv',3,'dfsdfsdf')";
            	String requete = "INSERT INTO article(id, titre,fichier, auteur,date) VALUES('"+obj.getId()+"','"+obj.getTitre()+"','"+obj.getFichier()+"',"+obj.getAuteur()+"'"+obj.getDate()+"')";
            	System.out.println(requete);

reponse = state.execute(requete);

                   
            } 
            catch (SQLException e) {
                    e.printStackTrace();
            }
           
            return reponse;
        }

classe POJO aticle
public class Article {


private String titre="";
private String date="";
private String fichier="";
private String auteur="";
private int id=0;

private static DAOArticle dao = new DAOArticle();



public Article (String titre, String string, String string2, String requete, int i){

this.id= id;
this.titre=titre;
this.date=date;
this.fichier=fichier;
this.auteur=auteur;

this.dao.create(this);
}


public void setTitre(String titre){
this.titre=titre;

this.dao.update(this);
}


public String getTitre(){
return this.titre;
}

public int getId(){
return this.id;
}


public String getAuteur(){
return this.auteur;
}
public void setAuteur(String auteur)
{
this.auteur=auteur;
this.dao.update(this);
}

public String getFichier(){
return this.fichier;
}
public void setFichier(String fichier)
{
this.fichier=fichier;
this.dao.update(this);
}

public String getDate(){
return this.date;
}
public void setDate(String date)
{
this.date=date;
this.dao.update(this);
}

public boolean find(String titre,String date, String fichier, int id){
dao.find(id, date, fichier, titre);


return false;

}


}



J'ai mis l'ensemble de mon code concernant l'opération create (pour le reste, je pourrai me débrouiller), cependant je e vois vraimnt pas du tout ou se trouve l'erreur.

Donc pour récapituler :
-la connexion se fait sans problème;
-lorsque j'intègre les informtions manuellemnt (directement dans les requêtes), les informations sont intégré dans la BDD.
-ce qui nne fonctionne pas : récupération des informations dans les JTEXFIELDS et les envoyer dans la BDD

Je seche completement HELP.

16 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
266
Salut,

Tu as quelques erreurs dans ta requête :

String requete = "INSERT INTO article(id, titre, fichier, auteur, date) VALUES('"+obj.getId()+"', '"+obj.getTitre()+"', '"+obj.getFichier()+"', '"+obj.getAuteur()+"', '"+obj.getDate()+"');";
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
Bonjour, excuse moi du retard, le message de réponse a été dans mes courriers indésirables. J'ai fait le changement de ma requête, effectivement il y avait une erreur, cependant, cela ne fonctionne toujours pas, il y a donc une seconde erreur, peux-tu m'éclairer???

Merci d'avance.
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
pour être exact l'erreur est la suivante :


Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at be.steve.DAO.DAOArticle.create(DAOArticle.java:40)
at interfaceGraphique.fenetre$7.actionPerformed(fenetre.java:211)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
266
Peux tu me copier la ligne qui lève cette exception ?
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
Bien sûr!!! Merci bcp pour ta réponse, la voici :

at be.steve.DAO.DAOArticle.create(DAOArticle.java:40)=
            	String requete = "INSERT INTO article(titre, fichier, date,auteur) VALUES('"+obj.getTitre()+"', '"+obj.getFichier()+"', '"+obj.getAuteur()+"', '"+obj.getDate()+"');";


at interfaceGraphique.fenetre$7.actionPerformed(fenetre.java:211)=

confirmerLArticle.create(obj);


Merci pour ton aide.
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
266
Tu appelles la méthode confirmerLArticle.create(obj); avec obj qui est null.

Et ensuite, quand tu essayes de faire obj.getTitre(); c'est normal qu'une nullPointerException soit levée...
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
ok, et comment corriger l'erreur? Merci pour ta réponse!
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
266
C'est une erreur de programmation, tu la corrigeras si tu n'appelles plus cette méthode avec null mais en lui passant un objet qui a le bon type.
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
Donc suivant ton raisonnement, je dois replacer la valeur null, par les parametres de l'objet?
Je ne vois pas trop comment écrire le code.

confirmerLArticle.create(new DAOArticle(titre, fichier, auteur, date))


Pourrais-tu m'aiguiller un petit peu plus? Comment dois-je corriger mon code pour que cela fonctionne??
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
266
Je ne sais pas ce qu'attend la méthode create. Il faut que tu lui passes le bon objet. Tu veux insérer dans la base des données qui proviennent d'un objet, c'est cet objet que tu dois passer en paramètre de ta méthode.
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
J'ai essayer de mettre mes JTexField en parametre,en réfléchissant à ce que tu viens d'écrire, j'ai donc changer mon code en
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

String titre = titre2.getText();
String fichier= fichier2.getText();
String auteur= auteur2.getText();
String date = date2.getText();

DAOArticle confirmerLArticle= new DAOArticle(titre2,fichier2,auteur2,date2);
Article obj =null;
confirmerLArticle.create(obj);

}


avec

public class DAOArticle extends DAO {

        public DAOArticle(JTextField titre2, JTextField fichier2, JTextField auteur2, JTextField date2) {
        	if(connect==null)
        		connect = DAOConnexion.getConnexion();
        }



 public boolean create(Article obj) {	
        	
        
        	boolean reponse=false;            
            
        	
            try {
            	Statement state = this.connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            	String requete = "INSERT INTO article(titre, fichier, date,auteur) VALUES('"+obj.getTitre()+"', '"+obj.getFichier()+"', '"+obj.getAuteur()+"', '"+obj.getDate()+"');";
            	System.out.println(requete);

reponse = state.execute(requete);

                   
            } 


...et... cela ne fonctionne toujours pas. Que te faudrait-il(comme morceau de code) pour me dire et m'expliquer exactement ce qu'il manque?
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
Plus haut je n'ai créé qu'une classe abstraite avec une méthode vide :

public abstract class DAO<T> {
        
        protected static Connection connect = null;
        
        public DAO(){
                
        }
        
        public abstract  boolean create(T obj);
        
        public abstract boolean delete(T obj);
        
        public abstract boolean update(T obj);
        
        public abstract ArrayList<T> find(String type, String info);
}
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
personne ne sait?
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
266
Tu fais toujours la même chose :
Article obj = null;
confirmerLArticle.create(obj);


C'est ca qui pose problème

Tu dois passer à la méthode create un objet de type Article non nul

Si le constructeur de ta classe article est correct :
Article obj  = new Article(titre2,fichier2,auteur2,date2);
confirmerLArticle.create(obj);
Messages postés
61
Date d'inscription
vendredi 7 janvier 2011
Statut
Membre
Dernière intervention
17 avril 2013
1
Merci Julien39, puis-je t'appeler Maître?? Le problème a été résolu. Un grand merci pour ton aide et ta patience.
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
266
oui, c'est possible.

a+