Projet

Résolu
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 - 5 août 2012 à 17:19
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 16 août 2012 à 14:31
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

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 août 2012 à 09:00
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()+"');";
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
11 août 2012 à 16:08
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.
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
12 août 2012 à 23:13
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)
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 août 2012 à 08:54
Peux tu me copier la ligne qui lève cette exception ?
3

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

Posez votre question
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
13 août 2012 à 11:19
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.
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 août 2012 à 11:24
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...
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
13 août 2012 à 12:15
ok, et comment corriger l'erreur? Merci pour ta réponse!
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 août 2012 à 14:11
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.
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
13 août 2012 à 15:08
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??
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 août 2012 à 15:57
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.
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
13 août 2012 à 16:42
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?
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
13 août 2012 à 16:46
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);
}
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
14 août 2012 à 00:08
personne ne sait?
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 août 2012 à 08:48
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);
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
16 août 2012 à 14:01
Merci Julien39, puis-je t'appeler Maître?? Le problème a été résolu. Un grand merci pour ton aide et ta patience.
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 août 2012 à 14:31
oui, c'est possible.

a+
3
Rejoignez-nous