Remplir une JTable a partir d'une BDD

Résolu/Fermé
rock in the air Messages postés 34 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 29 avril 2008 - 21 avril 2008 à 16:38
scorpion_20 Messages postés 6 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 13 janvier 2010 - 13 janv. 2010 à 17:37
Bonjour,

J'ai une base de donnée et j'essaie de faire une procédure qui récupère le resultat d'une requête et l'affiche dans une Jtable.
-Langage de prog: java.
-IDE: eclipse 3.0.2.
-BDD: oracle 10g.

Mais j'ai un souci je n'arrive pas car il y a un conflit de type, j'arrive pas a transtyper un type int en Object.
La ligne en question est indiquée ci dessous dans le code de ma procédure.

//fonction qui va afficher le tableau
public void afficherTableau()
{
//on fait disparaitre les boutons inutiles
btnExporter.setVisible(false);
btnImprimer.setVisible(false);

pnlPreview.removeAll();
pnlPreview.repaint();
pnlPreview.validate();

DefaultTableModel modell = new DefaultTableModel();
JTable table = new JTable(modell);
//les colonnes ou on va mettre les données
Object tab1[] = {""};
Object tab2[] = {""};
Object tab3[] = {""};
//Chacune des colonnes de la JTable...
tab1 = new Object[31];
tab2 = new Object[31];
tab3 = new Object[31];
//Ajout des colonnes précédemment déclarées
modell.addColumn("No Prog", tab1);
modell.addColumn("Date", tab2);
modell.addColumn("Nb Blocs/pg", tab3);
//table.setAlignmentX(2);
//table.setAlignmentY(3);
modell.addColumn("No Prog", tab1);
modell.addColumn("Date", tab2);
modell.addColumn("Nb Blocs/pg",tab3);
//on force la taille du tableau
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(100);

//ajout de la table dans le form
JScrollPane JSP = new JScrollPane(table);
//System.out.println("la hauteur est de:"+JSP.getHeight()+" la largeur ="+JSP.getWidth());
JSP.setSize(pnlPreview.getSize());
JSP.setPreferredSize(new Dimension(pnlContenuPreview.getSize().width, pnlContenuPreview.getSize().height-10));
JSP.setLocation(2,40);

//System.out.println("x:"+JSP.getX()+"y"+JSP.getY());

//JScrollPane myScrollPane = new JScrollPane(table);
JSP.setVisible(true);
PreparedStatement PS=null;
ResultSet RS=null;
final String QUERY_INDIC_TPS_SEJOUR_CSO=
"SELECT PROGRAMME.NUM_PROG,"+
"TO_CHAR(MIN(COMMANDE.PREM_ENF),'DD/MM/YYYY'), "+
"SUM (COMMANDE.QBL)"+
"FROM PROGRAMME, COMMANDE"+
"WHERE ( (PROGRAMME.NUM_PROG = COMMANDE.NUM_PROG)"+
"AND (PROGRAMME.NUM_CONT= ?)"+
"AND (TO_CHAR((COMMANDE.PREM_ENF), 'YYYY')= ?))"+
"GROUP BY PROGRAMME.NUM_PROG";
int conteneur=0;
int annee=0;


try{

//on récupère les variables passés en paramètre
PS=getConnection().prepareStatement(QUERY_INDIC_TPS_SEJOUR_CSO);
PS.setInt(1, conteneur);
PS.setString(2, new Integer(annee).toString());

RS=PS.executeQuery();
while (RS.next()){

//on stocke le résultat de la requête dans des variables
int num_prog=RS.getInt(1);
java.sql.Timestamp Date_enf=RS.getTimestamp(2);
int Nb_Bloc=RS.getInt(3);
//===>Comment ajouter les données dans la table sachant qu'il y a un problème de transtypage de int en Object??!!!

}
}
catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erreur : "+e);
System.err.println("Erreur lors de l'execution d'un traitement SQL!");
e.printStackTrace();
}
finally
{
close(PS, RS);
}


this.add(JSP);
}

MERCI de m'aider, c'est urgent!!!

Miriam.

5 réponses

rock in the air Messages postés 34 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 29 avril 2008 11
22 avril 2008 à 16:04
C'est bon ca marche :

J'ai remplacé le type objet:

Object tab1[] = {""};
Object tab2[] = {""};
Object tab3[] = {""};
//Chacune des colonnes de la JTable...
tab1 = new Object[31];
tab2 = new Object[31];
tab3 = new Object[31];

par des listes:

List liste1 = new ArrayList();
List liste2 = new ArrayList();
List liste3 = new ArrayList();
List liste4 = new ArrayList();

Puis j'ai stocké le résultat de ma requete dans :

//les colonnes ou on va mettre les données
Integer temp1 = new Integer(num_prog % 1000);
String temp2 = Date_enf;
Integer temp3 = new Integer(Nb_Bloc);
Integer temp4= new Integer(Cumul);

Puis dans une boucle je les ajoute dans mes listes déclarées précédemment:

//on ajoute les lignes récupérées dans la liste
liste1.add(temp1);
liste2.add(temp2);
liste3.add(temp3);
liste4.add(temp4);


Et finalement j'ajoute dans mes colonnes:

//Ajout des colonnes précédemment déclarées
modell.addColumn("No Prog", liste1.toArray());
modell.addColumn("Date", liste2.toArray());
modell.addColumn("Nb Blocs/pg", liste3.toArray());
modell.addColumn("Nb Blocs/Cumul", liste4.toArray());


Voilà!!
7
Utilisateur anonyme
22 avril 2008 à 11:15
Développe un peu plus au lieu de dire "Ca marche pas". Explique nous où est le problème (Message d'erreur, non affichage de la table, etc.)
2
Utilisateur anonyme
21 avril 2008 à 16:56
Utilise la méthode addRow sur ton modèle :
Object[] temp = {new Integer(Nb_Bloc), ...};modell.addRow(temp);
Et après ta boucle tu ajoutes :
table.setModel(modell);
Je pense que ça devrait le faire ;-)
1
rock in the air Messages postés 34 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 29 avril 2008 11
22 avril 2008 à 08:39
ca ne marche toujours pas!!!
0
scorpion_20 Messages postés 6 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 13 janvier 2010
13 janv. 2010 à 14:36
Bonjour
j'ai un problem au niveau de jTAble
je veux remplir le jTable avec un requet oracle
j'ai glisser le jTable dans ma forme et puis j'ai tap le code sous un ActionPerformed
quand j'ai glisse le jTable il me donne automatiquement les parametres de la table j'ai renomme les colonnes est quand j'ai essayer de remplir la table au niveau de while{}
il me donne une erreur parceque j'ai pas le nom de la table j'ai just le nom jTAble0
while(rs.next()){
jTable0[i][0]=rs.getString(1);//il me donne une erreur
}
donc je veux renommer le jTable pour remplir la table mais j'ai pas compris comment

MERCI de m'aider, c'est urgent!!!
Merci d'avace
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scorpion_20 Messages postés 6 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 13 janvier 2010
13 janv. 2010 à 17:37
Bonjour
j'ai un problem au niveau de jTAble
je veux remplir le jTable avec un requet oracle
j'ai glisser le jTable dans ma forme et puis j'ai tap le code sous un ActionPerformed
quand j'ai glisse le jTable il me donne automatiquement les parametres de la table j'ai renomme les colonnes est quand j'ai essayer de remplir la table au niveau de while{}
il me donne une erreur parceque j'ai pas le nom de la table j'ai just le nom jTAble0
Voici mon code :
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.rowset.CachedRowSet;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;

import org.dyno.visual.swing.layouts.Bilateral;
import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;


//VS4E -- DO NOT REMOVE THIS LINE!
public class info_compte extends JFrame {

private static final long serialVersionUID = 1L;
private JTable jTable0;
private JScrollPane jScrollPane0;
private static final String PREFERRED_LOOK_AND_FEEL = "javax.swing.plaf.metal.MetalLookAndFeel";
public info_compte() {
initComponents();
}

private void initComponents() {
setLayout(new GroupLayout());
add(getJScrollPane0(), new Constraints(new Bilateral(3, 0, 22), new Leading(2, 150, 10, 10)));
setSize(540, 240);
}

private JScrollPane getJScrollPane0() {
if (jScrollPane0 == null) {
jScrollPane0 = new JScrollPane();
jScrollPane0.setViewportView(getJTable0());
}
return jScrollPane0;
}

private JTable getJTable0() {
if (jTable0 == null) {
jTable0 = new JTable();
jTable0.setModel(new DefaultTableModel(new Object[1][6] , new String[] { "Nom", "Prenom","Serial carte","Date Dernier retrait","Retrait","Solde" }) {
private static final long serialVersionUID = 1L;
Class<?>[] types = new Class<?>[] { Object.class, Object.class, };

public Class<?> getColumnClass(int columnIndex) {
return types[columnIndex];
}
});
}
return jTable0;
}

private static void installLnF() {
try {
String lnfClassname = PREFERRED_LOOK_AND_FEEL;
if (lnfClassname == null)
lnfClassname = UIManager.getCrossPlatformLookAndFeelClassName();
UIManager.setLookAndFeel(lnfClassname);
} catch (Exception e) {
System.err.println("Cannot install " + PREFERRED_LOOK_AND_FEEL
+ " on this platform:" + e.getMessage());
}
}

/**
* Main entry of the class.
* Note: This class is only created so that you can easily preview the result at runtime.
* It is not expected to be managed by the designer.
* You can modify it as you like.
* @throws ClassNotFoundException
* @throws SQLException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
Class cl=Class.forName("oracle.jdbc.driver.OracleDriver");
String c="jdbc:oracle:thin:@localhost:1521:orcl";
Connection con =DriverManager.getConnection(c,"SYSTEM","s123");
int i=0;
CachedRowSet rowset;
rowset=(CachedRowSet) cl.newInstance();
try{
rowset.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
rowset.setConcurrency(ResultSet.CONCUR_UPDATABLE);
rowset.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");
rowset.setUsername("SYSTEM");
rowset.setPassword("s123");
rowset.setCommand("select clients.nom,clietns.prenom,carte.serial_carte,carte.date_dernier_retrait,carte.retrai,compte.solde from clients,carte,compte where clients.id_client=comte.id_client and compte.serial_carte=carte.serial_carte and carte.serial_carte='vf14552' ");
rowset.execute();
while (rowset.next()){
//jTable0[i][0]=rowset.getString(1);//le preblem au niveau de nom du jTable
// jTable0[i][1]=rowset.getString(2);//il me donne une errur du nom
// jTable0[i][2]=rowset.getInt(3);
// jTable0[i][3]=rowset.getString(4);
// jTable0[i][4]=rowset.getInt(5);
// jTable0[i][5]=rowset.getInt(6);
i++;
}
}catch(SQLException e){
e.printStackTrace();
}
installLnF();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
info_compte frame = new info_compte();
frame.setDefaultCloseOperation(info_compte.EXIT_ON_CLOSE);
frame.setTitle("info_compte");
frame.getContentPane().setPreferredSize(frame.getSize());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

}

donc je veux renommer le jTable pour remplir la table mais j'ai pas compris comment

MERCI de m'aider, c'est urgent!!!
Merci d'avace
0