Partage
  • Partager sur Facebook
  • Partager sur Twitter

JAVA/SQL

NullPointerException avec une requete

16 février 2012 à 11:49:24

Bonjour,

mon programme java leve une NullPointerException avec cette requete mais je ne vois pas l'erreur :

result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"' AND opeDate BETWEEN ('"+new SimpleDateFormat("dd/MM/yy").format(dateDeb.getDate())+"' AND '"+new SimpleDateFormat("dd-MM-yy").format(dateFin.getDate())+"')");


Mes autres requetes fonctionnent très bien...
Si quelqu'un voit mon erreur je suis preneur... Merci beaucoup :)
  • Partager sur Facebook
  • Partager sur Twitter
16 février 2012 à 14:26:34

Avec une StackTrace ça serait plus simple...

PS: je te conseilles les PreparedStatement au lieu d'utiliser un concaténation de String... (pas très sécure)
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2012 à 10:02:32

StackTrace :
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.JTable.prepareRenderer(JTable.java:5735)
        at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114)
        at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016)
        at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812)
        at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
        at javax.swing.JComponent.paintComponent(JComponent.java:778)
        at javax.swing.JComponent.paint(JComponent.java:1054)
        at javax.swing.JComponent.paintChildren(JComponent.java:887)
        at javax.swing.JComponent.paint(JComponent.java:1063)
        at javax.swing.JViewport.paint(JViewport.java:725)
        at javax.swing.JComponent.paintChildren(JComponent.java:887)
        at javax.swing.JComponent.paint(JComponent.java:1063)
        at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
        at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
        at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
        at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
        at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
        at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
        at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
        at java.awt.EventQueue.access$000(EventQueue.java:101)
        at java.awt.EventQueue$3.run(EventQueue.java:666)
        at java.awt.EventQueue$3.run(EventQueue.java:664)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)


D'accord je vais regarder un peu les PreparedStatement je ne connais pas encore.

Merci pour ta reponse :)
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2012 à 10:08:21

Il nous faudrait le morceau de code englobant ta requête, on peut difficilement tirer quelque chose de l'exception ainsi.
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2012 à 10:27:18

Tu as déclaré result de type ResultSet avant ? et state de type Statement ?
genre comme sa :
ResultSet result;
Statement state=connexion.createStatement();
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2012 à 10:33:17

public void reinitData() {
        try{
            Connection conn = ConnectionDB.getInstance();
            Statement state = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            ResultSet result = state.executeQuery("SELECT * FROM operation WHERE opeuti = '"+utiCode+"'  ORDER BY opedate");
            result.last();
            Object[][] donnees;
            int nbLignes = result.getRow();
            int ligne=0;
            donnees = new Object[nbLignes][5];
            result.beforeFirst();
            if(result.next()){
                do{
                donnees[ligne][0] = result.getDate(1);
                if(result.getBoolean(2)){
                    donnees[ligne][1] = String.valueOf(result.getFloat(3));
                    donnees[ligne][2] = "";
                }else{
                    donnees[ligne][2] = String.valueOf(result.getFloat(3));
                    donnees[ligne][1] = "";
                }
                donnees[ligne][3] = result.getString(4);
                donnees[ligne][4] = new BoutonSupp("Effacer",ligne);
                ligne++;
                }while(result.next());
               
            }else{
                donnees = new Object[1][5];
            }
            result.close();
            state.close();
            this.data = donnees;
            this.fireTableDataChanged();
        }catch(SQLException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
    }


Voila le code qui reinitialise le tableau.
Le Statement est créé avec la connection
et le resultSet directement récupéré avec le statement.
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2012 à 15:03:54

Ma clef primaire dans la table Utilisateur de ma bdd
et opeUti => clef etrangere en reference à Utilisateur(utiCode).

Ici, utiCode c'est ce code, récupéré grace à mon instance d'objet Utilisateur.
(userActuel)
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2012 à 15:16:20

Tu as regardé si la variable était pas null ?
  • Partager sur Facebook
  • Partager sur Twitter
17 février 2012 à 15:42:52

Oui oui la variable est pas nulle, ca fonctionne qui il n'y a qu'une seule des deux dates.
Par contre je viens de voir que ca ne fonctionne pas si je ne met que le libelé.

EDIT : Je me suis rendu compte que ce n'est pas le bon code que j'ai posté.
Voila le code qui bug :

valider.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent ae) {
                try{
                    Connection conn = ConnectionDB.getInstance();
                    Statement state = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                    ResultSet result;
                    if(dateDeb.getDate()!=null){
                        if(dateFin.getDate()!=null){
                            if(libele.getText()!=""){
                                result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"' AND opeDate BETWEEN '"+new SimpleDateFormat("dd/MM/yy").format(dateDeb.getDate())+"' AND '"+new SimpleDateFormat("dd-MM-yy").format(dateFin.getDate())+"' AND opeLibele = '"+libele.getText()+"'");
                            }else{
                                result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"' AND opeDate BETWEEN ('"+new SimpleDateFormat("dd/MM/yy").format(dateDeb.getDate())+"' AND '"+new SimpleDateFormat("dd-MM-yy").format(dateFin.getDate())+"')");
                            }
                        }else{
                            result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"' AND opeDate > '"+new SimpleDateFormat("dd/MM/yy").format(dateDeb.getDate())+"'");
                        }
                    }else if(dateFin.getDate()!=null){
                            if(!libele.getText().equals("")){
                                result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"' AND opeDate <= '"+new SimpleDateFormat("dd/MM/yy").format(dateFin.getDate())+"' AND opeLibele = '"+libele.getText()+"'");
                            }else{
                                result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"' AND opeDate <= '"+new SimpleDateFormat("dd/MM/yy").format(dateFin.getDate())+"'");
                            }
                    }else if(!libele.getText().equals("")){
                        result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"' AND opeLibele = '"+libele.getText()+"'");
                    }else{
                        result = state.executeQuery("SELECT * FROM OPERATION WHERE opeuti = '"+userActuel.getCode()+"'");
                    }
                    if(result!=null){
                        tp.getDataModel().majTabbedPane(result);
                    }
                    getContentPane().revalidate();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        });
  • Partager sur Facebook
  • Partager sur Twitter