cs_BXH
Messages postés23Date d'inscriptionmercredi 9 août 2006StatutMembreDernière intervention12 août 2013
-
27 janv. 2012 à 20:38
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020
-
8 févr. 2012 à 16:13
Bonjour à tous et à toutes !
Me re voila avec un nouveau souci (en ce moment ça n'arrête pas...).
En effet, je cherche à remplir une JTable avec le résultat d'une requête exécuté sur une base de donnée HSQL.
J'ai trouvé beaucoup de topics à ce sujet sur internet mais aucun ne répond à mon besoin.
Afin de bien comprendre le problème je vais prendre le temps de détailler mon architecture :
Je dispose d'une classe Tableau extends JPanel (avec un attribut privé JTable) qui fait appel, dans son constructeur, à une classe ModelTableau extends AbstractTableModel (class définie dans le même .java).
Pourquoi ce choix ? Car j'ai absolument besoin de redéfinir ma méthode setValueAt (object[], int, int) pour certaines interactions dans le tableau.
Cette classe est appelée dans mon interface graphique par
JComponent ContentPaneTableau = new Tableau();
Une chose curieuse : quand je demande un System.Out.Print(result) (résult étant le ResultSet de ma requête effectuée via un statement.execureQuery(requete)) pour vérifier le contenu du résultat de ma requête voila ce que m'affiche eclipse :
org.hsqldb.jdbc.JDBCResultSet@1db7df8
Voila pour la conception de la chose...
Je souhaiterais donc valoriser mon tableau avec les résultats de ma requête SQL...J'ai essayé pas mal de choses en fonction de ce que j'ai pu lire sur le net mais je ne suis qu'un humble codeur et j'avoue être à court de liens potentiellement utiles
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 27 janv. 2012 à 22:21
Bonjour,
Le résultat de la requête est enregistré dans une resultset, c'est un objet, si tu demandes un affichage, la méthode toString est appelée. Cette méthode n'a pas été surchargée, elle est donc identique à celle de Object et la référence mémoire est affichée.
Pour accéder aux données, il faut parcourir la résultset de cette manière :
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 28 janv. 2012 à 13:37
data = {resultString}; ne donne rien...
Ben, il ne faut pas rêver non plus
Tu as un ArrayIndexOutOfBoundsException parce que tu n'as pas initialisé ton tableau :
//Tu peux obtenir le nombre de lignes du tableau en faisant un select count(*)...
int nombreLignes=30;
String[][] matrice=new String[nombreLignes][];
for (int i=0 ; i<matrice.length; i++){
matrice[i]=new String[resultset.getMetaData().colomnCount()];
matrice[i][0]=resultset.getString(0);
//Idem pour les autres, tu peux faire une boucle
}
cs_BXH
Messages postés23Date d'inscriptionmercredi 9 août 2006StatutMembreDernière intervention12 août 20132 27 janv. 2012 à 22:50
Merci, l'affectation se fait bien donc la requête est fonctionnelle.
Mes données sont stockées dans un attribut privé :
private Object[][] data;
La valorisation de cet attribut est possible à l'initialisation :
private Object[][] data = {
{new Boolean(false), "StairWay to Heaven", "Led Zeppelin", "Rock", new Boolean(false), new Boolean(false)},
{new Boolean(false), "Whole lotta love", "Led Zeppelin", "Rock", new Boolean(false), new Boolean(false)}
};
Mais comment puis-je valoriser cet objet avec les valeurs de ma requête ?
J'ai essayé data[0][1]= "test"; mais eclipse me renvoi l'erreur
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 Ce n'est donc pas un tableau à double entrée particulier ?
cs_BXH
Messages postés23Date d'inscriptionmercredi 9 août 2006StatutMembreDernière intervention12 août 20132 28 janv. 2012 à 00:11
J'ai concaténé ma chaine d'affectation dans une String :
{new Boolean(false), "StairWay to Heaven", "Led Zeppelin", "Rock", new Boolean(false), new Boolean(false)},
{new Boolean(false), "Whole lotta love", "Led Zeppelin", "Rock", new Boolean(false), new Boolean(false)}
Comment puis-je l'affecter à mon Object ?
data = {resultString}; ne donne rien...
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?