Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java EE] Récupérer des infos en BDD

Sujet résolu
    15 juillet 2011 à 11:19:45

    Bonjour,

    je suis sur un projet que je reprend, et que j'essaie d'améliorer modestement, cependant, je ne trouve pas de solution à un problème.
    J'ai des éléments dans une table appelée incompatibilite (en BD), et je souhaite récupérer la liste de ces éléments afin de faire un traitement dessus. Voici le code :

    public class GetComponentAjaxController extends AbstractDefaultController
    {
        @EJB
        private IncompatibiliteDAO incompatibiliteDAO;
        
        @Override
        protected void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            HttpSession        session         = request.getSession();
            SessionInformation userInformation = (SessionInformation)session.getAttribute ("sessionInformation");
            WSeries            wSeries         = userInformation.getwSeries();
            String             nomComposant    = request.getParameter ("name");
            List<Incompatibilite> incompatibilites = incompatibiliteDAO.findAllIncompatibilites();
            request.setAttribute ("incompatibilites",incompatibilites);
            
            
        }
    }
    


    Incompatibilite.java
    @Entity
    @Table(name="incompatibilite")
    public class Incompatibilite extends Composant implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="id")
        private Integer id;
    
        @ManyToOne
        @JoinColumn(name="composant_id_1")
        private Composant composant1;
    
        @ManyToOne
        @JoinColumn(name="composant_id_2")
        private Composant composant2;
    
    
        public int getId1() {
            return composant1.getId();
        }
    
        public void setId1(int id1) {
            this.composant1.setId(id1);
        }
    
        public int getId2() {
            return composant2.getId();
        }
    
        public void setId2(int id2) {
            this.composant2.setId(id2);
        }
    }
    


    IncompatibiliteDAO :

    package fr.cycleslapierre.webseries.dao;
    
    
    import fr.cycleslapierre.webseries.dao.AbstractDAO;
    import fr.cycleslapierre.webseries.entity.Incompatibilite;
    import java.util.List;
    import javax.ejb.Stateless;
    import javax.ejb.TransactionAttribute;
    import javax.ejb.TransactionAttributeType;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
    /**
     *
     * @author multimedia2
     */
    @Stateless
    @TransactionAttribute(TransactionAttributeType.NEVER)
    public class IncompatibiliteDAO extends AbstractDAO<Incompatibilite>{
        
        @PersistenceContext(unitName = "WebSeriesPU")
        private EntityManager em;
    
        @Override
        protected EntityManager getEntityManager() {
            return em;
        }
    
        public IncompatibiliteDAO() {
            super(Incompatibilite.class);
        }
    
    
    
        
        public  List<Incompatibilite> findAllIncompatibilites(){
            String oql;
            Query query;
            oql = "SELECT i" +
                  " FROM Incompatibilite i";
            query = em.createQuery(oql);
            return getResultList(query);
        }
    
        
    }
    


    Le problème c'est que cela me renvoie une liste vide.

    J'ai une table incompatibilite (i minuscule), mais lorsque j'appelle avec un i minuscule cela me donne une erreur. J'ai remarqué que tous les appels aux tables se faisaient avec une lettre majuscule alors que ces tables ont toutes une lettre minuscule, donc le problème ne doit pas venir de là.

    Auriez vous une idée ?

    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2011 à 11:31:17

      "SELECT i.* FROM Incompatibilite i" ?
      • Partager sur Facebook
      • Partager sur Twitter
        15 juillet 2011 à 11:35:03

        A priori non, cela me renvoie une erreur :

        Exception Description: Syntax error parsing the query [SELECT i.* FROM Incompatibilite i], line 1, column 9: unexpected token [*].

        c'est bien ce que vous me conseilliez?
        • Partager sur Facebook
        • Partager sur Twitter
          15 juillet 2011 à 11:37:11

          Ah bah oui, je suis bête. Essaye plutot :
          "SELECT * FROM Incompatibilite".
          • Partager sur Facebook
          • Partager sur Twitter
            15 juillet 2011 à 11:45:33

            J'avais déjà essay", et c'est pareil, il n'aime pas mon * appremment... :p

            Exception Description: Syntax error parsing the query [SELECT * FROM Incompatibilite], line 1, column 7: unexpected token [*].
            Internal Exception: NoViableAltException(93@[330:16: ( DISTINCT )?])

            J'ai donc essayé avec DISTINCT, même résultat :colere2:
            • Partager sur Facebook
            • Partager sur Twitter
              15 juillet 2011 à 11:48:14

              Pourrais je avoir le détail de getResultList(query);?
              • Partager sur Facebook
              • Partager sur Twitter
                15 juillet 2011 à 11:51:22

                Haem, erreur de ma part, je croyais vous avoir copié le bon code.

                La bonne ligne est : return query.getResultList();

                Désolé.. Le reste est correct par contre :D

                Cependant il y a bien une méthode :
                public <T> List<T> getResultList (Query query) {
                
                        try {
                
                            return query.getResultList();
                        } catch (NoResultException e) {
                            return null;
                        }
                    }
                


                Peut être dois-je utiliser celle-ci? Je ne vois pas vraiment ce que cela change à vrai dire..
                • Partager sur Facebook
                • Partager sur Twitter
                  15 juillet 2011 à 11:55:29

                  Utilise tu un framework connu ou est ce ton collègue qui a codé cela? Si c'est ton collègue, il va nous être difficile de t'aider :S
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 juillet 2011 à 11:59:59

                    Ce n'est pas un collègue mais bon on peut dire que c'est comme si, sauf que je peux rien lui demander :P.

                    En l'occurrence, le getResultList() est une méthode déjà dans java :

                    Voici la description

                    Le getResultList(query) est une méthode que ce "collègue" à développé, mais vu qu'elle n'utilise que la méthode décrite ci-dessus...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 juillet 2011 à 12:03:46

                      C'est quoi l'erreur quand tu utilises incompatibilite avec un i minuscule ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 juillet 2011 à 12:05:54

                        Il ne la reconnaît pas a priori :

                        Citation : Netbeans

                        Exception Description: Error compiling the query [SELECT c FROM incompatibilite c]. Unknown entity type [incompatibilite].

                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 juillet 2011 à 9:21:31

                          Petit UP.

                          Après moultes tests, je pense qu'il n'arrive pas à piocher des infos dans ma table incompatibilite...

                          Si je fais :
                          SELECT c.id FROM Cadre c

                          Cela me renvoie une liste contenant 5id, contenus dans ma table cadre.

                          Par contre, ayant un champ id également dans ma table incompatibilite, lorsque je fais :
                          SELECT c.id FROM Incompatibilite c

                          Cela me renvoie une liste vide. Je n'ai aucune erreur, il arrive donc bien à trouver ma table, mais ne pioche aucune info dedans. Ais-je une mise à jour à faire lorsque je modifie des tables? Je pense que cela doit être plutot simple, mais je ne trouve pas la cause de cette erreur.

                          Merci d'avance !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 juillet 2011 à 9:38:05

                            Arf, là c'est raide.

                            Question très très con, désolé : est-ce que tu es sur qu'il y a des entrées dans la table incompatibilité ? Oui, c'est con, mais je préfère checker ^^

                            Si oui, est-ce que tes tables tournent sur le même moteur (par exemple avec MySQL, MyISAM et InnoDB peuvent avoir des comportements différents) ?

                            Si non, est-ce que tu peux uniformiser ça ? Si oui...beh... :(
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 juillet 2011 à 9:43:06

                              Beh, quand je vais dans MySQL Command Line, et que je fais :

                              use database webseries;
                              SELECT * FROM incompatibilite;

                              j'ai mes entrées.

                              Si je remplace ma seconde ligne par SELECT * FROM cadre;
                              J'ai également mes entrées.

                              N'étant pas un fin connaisseur de BDD, je pense quand même que tout tourne donc sur le même moteur (bien que je ne sache pas vraiment à quoi correspond ce mot). Et donc, oui, j'ai des entrées dans ma table incompatibilite :P.

                              Donc ? "Beh..."? :(


                              EDIT : Alors, maintenant, et je ne sais pas trop pourquoi.. cela marche...

                              Merci de votre aide en tout cas, mais encore un mystère non résolu :P.

                              Je met le sujet résolu du coup :D
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 juillet 2011 à 10:33:19

                                Est-ce que tu peux aller dans MYSQL command line, et faire :

                                "SHOW CREATE TABLE incompatibilite" et "SHOW CREATE TABLE cadre" et poster les deux messages complets stp ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 juillet 2011 à 11:10:39

                                  Voici le log :

                                  mysql> show create table incompatibilite;
                                  +-----------------+------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  ---------------------------------------------------------------------------+
                                  | Table | Create Table


                                  |
                                  +-----------------+------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  ---------------------------------------------------------------------------+
                                  | incompatibilite | CREATE TABLE `incompatibilite` (
                                  `id` int(11) NOT NULL AUTO_INCREMENT,
                                  `composant_id_2` int(11) DEFAULT NULL,
                                  `composant_id_1` int(11) DEFAULT NULL,
                                  PRIMARY KEY (`id`),
                                  KEY `FK_incompatibilite_composant_id_1` (`composant_id_1`),
                                  KEY `FK_incompatibilite_composant_id_2` (`composant_id_2`)
                                  ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 |
                                  +-----------------+------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  ---------------------------------------------------------------------------+
                                  1 row in set (0.01 sec)

                                  mysql> show create table cadre;
                                  +-------+----------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------+
                                  | Table | Create Table


                                  |
                                  +-------+----------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------+
                                  | cadre | CREATE TABLE `cadre` (
                                  `id` int(11) NOT NULL,
                                  `fourche_poids` int(11) DEFAULT NULL,
                                  `direction` varchar(255) DEFAULT NULL,
                                  `isp` int(11) DEFAULT NULL,
                                  `materiau` varchar(255) DEFAULT NULL,
                                  `fourche` varchar(255) DEFAULT NULL,
                                  `ordre` int(11) DEFAULT NULL,
                                  `direction_poids` varchar(255) DEFAULT NULL,
                                  PRIMARY KEY (`id`)
                                  ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
                                  +-------+----------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------------
                                  -------------------------------------------------------------------------------------+
                                  1 row in set (0.00 sec)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 juillet 2011 à 11:20:27

                                    Je viens de voir ton edit. C'est bien que ça marche, parce que j'étais à cours d'idées ^^ Tu as rien changé du tout ???
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 juillet 2011 à 11:36:07

                                      Ben non, je sais pas trop ce qui s'est passé...

                                      Peut être que de faire certains affichages a mis à jour la table, ou un truc du genre...

                                      T'en fais pas, je reviendrai sûrement pour d'autres soucis qui eux seront plus "normaux" :lol:
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [Java EE] Récupérer des infos en BDD

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown