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

NetBeans Java Discussion :

Test de codes sur les classes JDBCRowSetImpl et CachedRowSetImpl dans Netbeans


Sujet :

NetBeans Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 3
    Par défaut Test de codes sur les classes JDBCRowSetImpl et CachedRowSetImpl dans Netbeans
    Bonsoir

    Je suis en train de me faire le livre "Programmer en Java - Couvre Java 10 à Java 14" de Claude Delannoy.

    J'essaie de tester les exemples de code qui se trouvent :
    "Chapitre 29 : Utilisation de bases de données avec JDBC".
    "7 - L'interface Rowset".

    Pour la classe JDBCRowSetImpl :
    Construction à partir d’un objet de type ResultSet
    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
     
    import java.sql.* ;
    import javax.sql.rowset.* ;   // pour RowSet
    import com.sun.rowset.JdbcRowSetImpl ;  // indispensable   
    public class  Rowset
    { public static void main (String[] args) throws ClassNotFoundException, SQLException
      { Class.forName ("com.mysql.cj.jdbc.Driver") ; 
        Connection connec = DriverManager.getConnection
              ("jdbc:mysql://root@localhost:3306/stocks");
          // création d'un ResultSet 
        String commande = "SELECT nom, quantite FROM produits" ;
        Statement stmt = connec.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                          ResultSet.CONCUR_UPDATABLE) ;
        ResultSet res ;
        res = stmt.executeQuery(commande);
          // création d'un RowSet enveloppe du ResultSet et utilisation
        JdbcRowSet rs = new JdbcRowSetImpl (res) ;
        String nom ; int qte ;
          // petite mise à jour
        rs.first() ;
        rs.updateString (1, "Cafetière 6 T") ;
        rs.updateRow();
          // liste dans l'ordre inverse
        rs.afterLast();
        while (rs.previous())
        { nom  = rs.getString (1) ; qte  = rs.getInt (2) ;
          System.out.println (nom + " " + qte) ;
        }
        stmt.close () ; res.close (); rs.close (); connec.close () ;
      }
    }
    Construction d’un objet autonome
    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
     
    import java.sql.* ;
    import javax.sql.rowset.* ;   // pour rowset
    import com.sun.rowset.JdbcRowSetImpl ;  // indispensable !!!  
    public class Rowset1
    { public static void main (String[] args) throws ClassNotFoundException, SQLException
      { Class.forName ("com.mysql.cj.jdbc.Driver") ; 
        JdbcRowSet rs = new JdbcRowSetImpl () ;
        rs.setUrl ("jdbc:mysql://root@localhost:3306/stocks");
        rs.setType (ResultSet.TYPE_SCROLL_SENSITIVE) ;
        rs.setConcurrency (ResultSet.CONCUR_UPDATABLE) ;  
        rs.setCommand ("SELECT nom, quantite FROM produits") ;
        rs.execute();
          // petite mise à jour
        rs.first() ;
        rs.updateString (1, "Cafetière 9 T") ;
        rs.updateRow();
          // liste dans l'ordre inverse
        String nom ; int qte ;
        rs.afterLast();
        while (rs.previous())
        { nom  = rs.getString (1) ; qte  = rs.getInt (2) ;
          System.out.println (nom + " " + qte) ;
        }
        rs.close ();
      }
    }
    Pour la classe CachedRowSetImpl
    Construction à partir d’un objet de type ResultSet
    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
     
    import java.sql.* ;
    import com.sun.rowset.CachedRowSetImpl ;   // ou sun.rowset.CachedRowSetImpl
    //import com.sun.rowset.JdbcRowSetImpl;
    import javax.sql.rowset.* ;   // pour CachedRowSet
    public class Rowset3
    { public static void main (String[] args) throws ClassNotFoundException, SQLException
      { Class.forName ("com.mysql.cj.jdbc.Driver") ; 
        Connection connec = DriverManager.getConnection
              ("jdbc:mysql://root@localhost:3306/stocks");
          // création d'un ResultSet 
        String commande = "SELECT nom, quantite FROM produits" ;
        Statement stmt = connec.createStatement() ;
        ResultSet res ;
        res = stmt.executeQuery(commande);
           // création d'un RowSet enveloppe du ResultSet et utilisation
        CachedRowSet rs = new CachedRowSetImpl() ;
        rs.populate(res) ;   // on peuple le CachedRowSet avec les données du ResultSet
           // petite mise à jour du premier enregistrement
        rs.first() ;
        rs.updateString (1, "Cafetière 18 T") ;
        rs.updateRow(); 
        rs.acceptChanges(connec) ; // indispensable de fournir ici les infos de connexion
          // liste dans l'ordre inverse
        String nom ; int qte ;
        rs.afterLast ();
        while (rs.previous())
        { nom  = rs.getString (1) ; qte  = rs.getInt (2) ;
          System.out.println (nom + " " + qte) ;
        }
        rs.close(); res.close () ;
      }
    }
    Construction d’un objet autonome
    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
     
    import java.sql.* ;
    import com.sun.rowset.CachedRowSetImpl ;   // ou sun.rowset.CachedRowSetImpl
    import javax.sql.rowset.* ;   // pour CachedRowSet
    public class Rowset2
    { public static void main (String[] args) throws ClassNotFoundException, SQLException
      { Class.forName ("com.mysql.cj.jdbc.Driver") ; 
        CachedRowSet rs = new CachedRowSetImpl () ;
        rs.setUrl ("jdbc:mysql://root@localhost:3306/stocks");
        rs.setType (ResultSet.TYPE_SCROLL_SENSITIVE) ;
        rs.setConcurrency (ResultSet.CONCUR_UPDATABLE) ;  
        rs.setCommand ("SELECT nom, quantite FROM produits") ;
        rs.execute();
          // petite mise à jour du premier enregistrement
        rs.first() ;
        rs.updateString (1, "Cafetière 15 T") ;
        rs.updateRow(); 
        rs.acceptChanges() ; // indispensable ici
          // liste dans l'ordre inverse
        String nom ; int qte ;
        rs.afterLast ();
        while (rs.previous())
        { nom  = rs.getString (1) ; qte  = rs.getInt (2) ;
          System.out.println (nom + " " + qte) ;
        }
        rs.close();
      } 
    }
    J'utilise :
    NetBeans 14
    JDK 17.0.3.1
    MySQL Connector/J 8.0.30
    MySQL 5.7.17

    Quand je tente de compiler le 1er code et le 2ème code, j'ai ce message d'erreur :
    error: package com.sun.rowset is not visible
    import com.sun.rowset.JdbcRowSetImpl ; // indispensable
    (package com.sun.rowset is declared in module java.sql.rowset, which does not export it)
    Quand je tente de compiler le 3ème code et le 4ème code, j'ai ce message d'erreur :
    error: package com.sun.rowset is not visible
    import com.sun.rowset.CachedRowSetImpl ; // ou sun.rowset.CachedRowSetImpl
    (package com.sun.rowset is declared in module java.sql.rowset, which does not export it)
    Que faire ?

    Merci d'avance

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 3
    Par défaut
    Avancement de mes recherches

    Avec le JDK8

    Pour le 1er et le 2ème code :
    J'ai dû changer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String commande = "SELECT nom, quantite FROM produits" ;
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String commande = "SELECT nom, quantite, reference FROM produits" ;
    Car, dans cette chaîne de caractères, il faut à tout prix la colonne qui possède la clé primaire (voir https://coderanch.com/t/658850/datab...able-ResultSet).

    Pour le 3ème code :
    Il faut ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connec.setAutoCommit(false);
    Sinon on a un message d'erreur
    java.sql.SQLException: Can't call commit when autocommit=true
    Pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.acceptChanges(connec) ;
    Pour le 4ème code :
    Il faut aussi désactiver l'autocommit mais je n'ai pas encore trouvé de solution.
    Sur Internet, parfois, on recommande d'ajouter
    A la fin de la chaîne de connexion mais cela est sans effet.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2022
    Messages : 3
    Par défaut
    Avancement de mes recherches

    Avec le JDK17

    Pour le 1er code :
    Il faut supprimer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.rowset.JdbcRowSetImpl ;
    Si je modifie la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JdbcRowSet rs = new JdbcRowSetImpl (res) ;
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JdbcRowSet rs = RowSetProvider.newFactory().createJdbcRowSet() ;
    On obtient un message d'erreur :
    Exception in thread "main" java.sql.SQLException: Invalid state
    at java.sql.rowset/com.sun.rowset.JdbcRowSetImpl.checkState(JdbcRowSetImpl.java:505)
    at java.sql.rowset/com.sun.rowset.JdbcRowSetImpl.first(JdbcRowSetImpl.java:1886)
    Pour la ligne
    Pour le 2ème code :
    Il faut supprimer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.rowset.JdbcRowSetImpl ;
    Et modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JdbcRowSet rs = new JdbcRowSetImpl () ;
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JdbcRowSet rs = RowSetProvider.newFactory().createJdbcRowSet() ;
    Et modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.setCommand ("SELECT nom, quantite FROM produits") ;
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.setCommand ("SELECT nom, quantite, reference FROM produits") ;
    Car, dans cette chaîne de caractères, il faut à tout prix la colonne qui possède la clé primaire (voir https://coderanch.com/t/658850/datab...able-ResultSet).

    Pour le 3ème code :
    Il faut supprimer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.rowset.CachedRowSetImpl ;
    Et modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CachedRowSet rs = new CachedRowSetImpl() ;
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CachedRowSet rs = RowSetProvider.newFactory().createCachedRowSet() ;
    Et ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connec.setAutoCommit(false);
    Sinon on a un message d'erreur
    java.sql.SQLException: Can't call commit when autocommit=true
    Pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.acceptChanges(connec) ;
    Pour le 4ème code :
    Il faut supprimer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.rowset.CachedRowSetImpl ;
    Et modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CachedRowSet rs = new CachedRowSetImpl() ;
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CachedRowSet rs = RowSetProvider.newFactory().createCachedRowSet() ;
    Il faut aussi désactiver l'autocommit mais je n'ai pas encore trouvé de solution.
    Sur Internet, parfois, on recommande d'ajouter
    A la fin de la chaîne de connexion mais cela est sans effet.

Discussions similaires

  1. Comment apprendre à déboguer un code portant sur les classes internes?
    Par AntoineCompagnie dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 20/12/2015, 18h38
  2. Réponses: 2
    Dernier message: 21/12/2010, 10h58
  3. [Checkstyle] [Maven] activation du checkstyle report sur les classes de test
    Par cronoschris dans le forum Qualimétrie
    Réponses: 19
    Dernier message: 08/05/2008, 19h24
  4. Question de base sur les classes
    Par deaven dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 16h20

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