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

JDBC Java Discussion :

Comportement bizarre select


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut Comportement bizarre select
    Bonsoir,

    j'ai un comportement bizzare, lorsque j'essaie de lire une entrée dans une des tables de ma DB.

    j'ai ces 2 requêtes préparées (un insert et un select):
    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
    @Override
        public void create(Object entity) {
            try {
                Connection con = ConnectDB.getInstance().getConnection();
                String query = "INSERT INTO catégories_articles (PK_id_categories_articles,nom_categories_articles)" + "values (?,?)";
                PreparedStatement preparedStmt;
                CategorieArticle cat = (CategorieArticle) entity;
                int id = cat.getIdCategorieArticle();
                String nom = cat.getNomCategorieArticle();
                System.out.println(nom);
                try {
                    preparedStmt = con.prepareStatement(query);
                    preparedStmt.setInt(1, id);
                    preparedStmt.setString(2, nom);
                    preparedStmt.executeUpdate();
                    preparedStmt.close();
                } catch (SQLException ex) {
                    Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
                    System.out.println("error create statement: " + ex);
                }
            } catch (SQLException ex) {
                Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("error create : " + ex);
            }
        }
     
        /**
         * Find, va lire une catégorie d'article via son id et un requête préparée
         * SELECT
         *
         * @param id
         * @return CategorieArticle
         */
        @Override
        public Object read(int id) {
            CategorieArticle cat = new CategorieArticle(id);     
            try (Connection con = ConnectDB.getInstance().getConnection()) {
                String query = "SELECT * FROM catégories_articles WHERE PK_id_categories_articles = ?";
                try (PreparedStatement preparedStmt = con.prepareStatement(query)) {
                    preparedStmt.setInt(1, id);
                    ResultSet res = preparedStmt.executeQuery();
                    while (res.next()) {
                        cat.setIdCategorieArticle(res.getInt("PK_id_categories_articles"));
                        cat.setNomCategorieArticle(res.getString("nom_categories_articles"));
                    }
                    preparedStmt.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            System.out.println("print 1[" + cat.idCategorieArticle + "," + cat.nomCategorieArticle + "]");
     
            return cat;
        }
     
        @Override
        public void update(Object entity
        ) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
     
        @Override
        public void delete(Object entity
        ) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    L'insert après contrôle dans ma DB se fait correctement.

    Lorque j'exécute ces tests unitaires:
    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
    @Test
        public void test1_insert_categorie() throws ErrDoublon {
            Controler contr = Controler.getInstance();
            contr.addCategorie("Description");
            System.out.println("TEST1 - Catégorie ajouté dans la DB.");
        }
     
        /**
         * test d'un select dans catégories d'articles sur base de l'id
         */
        @Test
        public void test2_readCategorieById() {       
            Controler contr = Controler.getInstance();
            CategorieArticle cat = contr.loadCategorieById(7);
            System.out.println("TEST2 - Catégorie lue dans la DB.");
            System.out.println("print 3[" + cat.idCategorieArticle + "," + cat.nomCategorieArticle + "]");
            assertEquals(cat.getIdCategorieArticle(), 7);
            System.out.println("ID OK");
            assertEquals(cat.getNomCategorieArticle(), "Description");
            System.out.println("TEST2 - l'objet lu est le bon");
        }
    le premier test est bon et le deuxième ne reconnait pas le nom de l'article il est à null.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals(cat.getNomCategorieArticle(), "Description");
    Par contre aprsè si je n'exécute que le deuxième test, celui-ci passe sans problème

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    On peut voir le code de la classe CategorieArticle ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    catégorieArticle
    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
    package be.iepscfjemelle.nicolay.projet_sgbd.model;
     
    /**
     * Classe CategorieArticle, reprend les attributs, accesseurs et constructeurs d'un
     * CategorieArticle. Les mêmes attributs que dans la DB.
     *
     * @author Frederic Nicolay 3ème Bachelier Informatique
     */
    public class CategorieArticle {
     
        //Attributs
        public int idCategorieArticle;
        public String nomCategorieArticle;
     
        //Constructeur par defaut
     
        public CategorieArticle() {
        }
     
        /**
         * Constructeur
         * @param idCategorieArticle
         * @param nomCategorieArticle 
         */
        public CategorieArticle(int idCategorieArticle, String nomCategorieArticle) {
            this.idCategorieArticle = idCategorieArticle;
            this.nomCategorieArticle = nomCategorieArticle;
        }
     
        /**
         * Constructeur
         * @param nom 
         */
        public CategorieArticle(String nom) {
            this.nomCategorieArticle = nom;
        }
     
        /**
         * Constructeur
         * @param id 
         */
        public CategorieArticle(int id) {
            this.idCategorieArticle = id;
        }
     
        //Accesseurs
     
        public int getIdCategorieArticle() {
            return idCategorieArticle;
        }
     
        public void setIdCategorieArticle(int idCategorieArticle) {
            this.idCategorieArticle = idCategorieArticle;
        }
     
        public String getNomCategorieArticle() {
            return nomCategorieArticle;
        }
     
        public void setNomCategorieArticle(String nomCategorieArticle) {
            this.nomCategorieArticle = nomCategorieArticle;
        }
     
     
    }
    CategorieArticleDAO
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    package be.iepscfjemelle.nicolay.projet_sgbd.model;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    /**
     * Opérations CRUD sur les catégories d'articles
     *
     * @author Frederic Nicolay 3ème Bachelier Informatique
     */
    public class CategorieArticleDAO implements IntDAO {
     
        public CategorieArticleDAO(ConnectDB con) {
        }
     
        /**
         * Create pour faire l'insert d'une nouvelle catégorie via un requête
         * préparée INSERT
         *
         * @param entity
         */
        @Override
        public void create(Object entity) {
            try {
                Connection con = ConnectDB.getInstance().getConnection();
                String query = "INSERT INTO catégories_articles (PK_id_categories_articles,nom_categories_articles)" + "values (?,?)";
                PreparedStatement preparedStmt;
                CategorieArticle cat = (CategorieArticle) entity;
                int id = cat.getIdCategorieArticle();
                String nom = cat.getNomCategorieArticle();
                System.out.println(nom);
                try {
                    preparedStmt = con.prepareStatement(query);
                    preparedStmt.setInt(1, id);
                    preparedStmt.setString(2, nom);
                    preparedStmt.executeUpdate();
                    preparedStmt.close();
                } catch (SQLException ex) {
                    Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
                    System.out.println("error create statement: " + ex);
                }
            } catch (SQLException ex) {
                Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("error create : " + ex);
            }
        }
     
        /**
         * Find, va lire une catégorie d'article via son id et un requête préparée
         * SELECT
         *
         * @param id
         * @return CategorieArticle
         */
        @Override
        public Object read(int id) {
            CategorieArticle cat = new CategorieArticle(id);
            try (Connection con = ConnectDB.getInstance().getConnection()) {
                String query = "SELECT * FROM catégories_articles WHERE PK_id_categories_articles = ?";
                try (PreparedStatement preparedStmt = con.prepareStatement(query)) {
                    preparedStmt.setInt(1, id);
                    ResultSet res = preparedStmt.executeQuery();
                    while (res.next()) {
                        cat.setIdCategorieArticle(res.getInt("PK_id_categories_articles"));
                        cat.setNomCategorieArticle(res.getString("nom_categories_articles"));
                    }
                    preparedStmt.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("error readstatement: " + ex);
            }
     
            System.out.println("print 1[" + cat.idCategorieArticle + "," + cat.nomCategorieArticle + "]");
     
            return cat;
        }
     
        /**
         * update, va mattre à jour une catégorie d'article via son id et un requête préparée UPDATE
         * @param id
         * @param string 
         */
        @Override
        public void update(int id, String string) {
            try (Connection con = ConnectDB.getInstance().getConnection()) {
                String query = "UPDATE catégories_articles SET nom_categories_articles = ? WHERE PK_id_categories_articles = ?";
                try (PreparedStatement preparedStmt = con.prepareStatement(query)) {
                    preparedStmt.setString(1, string);
                    preparedStmt.setInt(2, id);
                    preparedStmt.executeUpdate();
                    preparedStmt.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
        /**
         * delete va effacer une catégorie d'article via son id et un requête préparée DELETE
         * @param id 
         */
        @Override
        public void delete(int id) {
            try (Connection con = ConnectDB.getInstance().getConnection()) {
                String query = "DELETE FROM catégories_articles WHERE PK_id_categories_articles = ?";
                try (PreparedStatement preparedStmt = con.prepareStatement(query)) {
                    preparedStmt.setInt(1, id);
                    preparedStmt.executeUpdate();
                    preparedStmt.close();
                } 
            } catch (SQLException ex) {
                Logger.getLogger(CategorieArticleDAO.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("error delete: " + ex);
            }
     
        }
    }

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Points : 99
    Points
    99
    Par défaut
    Problème résolu,

    j'ai ajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @FixMethodOrder(MethodSorters.NAME_ASCENDING)
    les tests ne s'exécutepas forcément dans l'ordre défini, cette méthode pertmet qu'ils s'exécutent dans l'ordre de leur noms.

    Il fallait le savoir...


    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    @FixMethodOrder(MethodSorters.NAME_ASCENDING)//Exécute les tests en fonction de leurs noms
    public class Test2_Gestion_Categorie_article {
     
        //Attribut
        ArrayList<CategorieArticle> list = new ArrayList<>();
     
        public Test2_Gestion_Categorie_article() {
        }
     
        @BeforeClass
        public static void setUpClass() {
        }
     
        @AfterClass
        public static void tearDownClass() {
        }
     
        @Before
        public void setUp() {
        }
     
        @After
        public void tearDown() {
        }
     
        /**
         * TODO attraper l'erreur doublon, contrainte unicité nom catégorie
         * FONCTIONNE, test d'un insert dans catégories d'articles
         * @throws ErrDoublon 
         */
        @Test
        public void test1_insert_categorie() throws ErrDoublon {
            Controler contr = Controler.getInstance();
            contr.addCategorie("Decoration");
            System.out.println("TEST1 - Catégorie ajouté dans la DB.");
        }
     
        /**
         * test d'un select dans catégories d'articles sur base de l'id
         */
        @Test
        public void test2_readCategorieById() {       
            Controler contr = Controler.getInstance();
            CategorieArticle cat = contr.loadCategorieById(8);
            System.out.println("TEST2 - Catégorie lue dans la DB.");
            System.out.println("print 3[" + cat.idCategorieArticle + "," + cat.nomCategorieArticle + "]");
            assertEquals(cat.getIdCategorieArticle(), 8);
            System.out.println("ID OK");
            assertEquals(cat.getNomCategorieArticle(), "Decoration");
            System.out.println("TEST2 - l'objet lu est le bon");
        }
     
        /**
         * test d'un update de catégorie d'article sur base de l'id
         */
        @Test
        public void test3_updateCategoryById() {
            Controler contr = Controler.getInstance();
            contr.updateCategorie(8, "Hi-Fi");
        }
     
        /**
         * test d'un select dans catégories d'articles sur base de l'id
         */
        @Test
        public void test4_readCategorieById() {       
            Controler contr = Controler.getInstance();
            CategorieArticle cat = contr.loadCategorieById(8);
            System.out.println("TEST2 - Catégorie lue dans la DB.");
            System.out.println("print 3[" + cat.idCategorieArticle + "," + cat.nomCategorieArticle + "]");
            assertEquals(cat.getIdCategorieArticle(), 8);
            System.out.println("ID OK");
            assertEquals(cat.getNomCategorieArticle(), "Hi-Fi");
            System.out.println("TEST2 - l'objet lu est le bon");
        }
     
        /**
         * test d'un delete dans catégories d'articles sur base de l'id
         */
        @Test
        public void test5_deleteCategoryById() {
            Controler contr = Controler.getInstance();
            contr.delCategorie(7);
        }
     
    }

  5. #5
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Cisman Voir le message
    les tests ne s'exécutepas forcément dans l'ordre défini, cette méthode pertmet qu'ils s'exécutent dans l'ordre de leur noms.

    Il fallait le savoir...
    Salut,

    C'est pour ça qu'existent les suites de test
    cf jmdoudoux :

    Les suites de tests permettent de regrouper plusieurs tests dans une même classe. Ceci permet l'automatisation de l'ensemble des tests inclus dans la suite et de préciser leur ordre d'exécution.

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

Discussions similaires

  1. Comportement bizarre de l'affichage avant un select
    Par maximus15 dans le forum Réseau
    Réponses: 2
    Dernier message: 31/03/2010, 05h06
  2. Comportement bizarre d'un layout:select
    Par ruff15 dans le forum Struts 1
    Réponses: 4
    Dernier message: 27/10/2008, 12h28
  3. Réponses: 3
    Dernier message: 23/06/2008, 16h08
  4. comportement bizarre d"un SELECT
    Par jam92400 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2007, 16h20
  5. select au comportement bizarre
    Par juin29 dans le forum Oracle
    Réponses: 5
    Dernier message: 18/05/2006, 20h24

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