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
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
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 () ; } }
Pour la classe CachedRowSetImpl
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 (); } }
Construction à partir d’un objet de type ResultSet
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
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 () ; } }
J'utilise :
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(); } }
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 :
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.JdbcRowSetImpl ; // indispensable
(package com.sun.rowset is declared in module java.sql.rowset, which does not export it)
Que faire ?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)
Merci d'avance![]()
Partager