Remplir une Jtable avec un ResultSet [Résolu]

oulanos 25 Messages postés vendredi 14 avril 2006Date d'inscription 10 mai 2010 Dernière intervention - 8 juin 2009 à 16:59 - Dernière réponse : cs_sara21 5 Messages postés samedi 16 juin 2007Date d'inscription 16 décembre 2009 Dernière intervention
- 8 déc. 2009 à 14:56
Bonjour à tous, je viens demander un peu d'aide car là je galère ^^

Alors voilà, je récupère dans un ResultSet des données d'une base de données Mysql à l'aide de la requête :

 Statement statement = conn.createStatement() ;             ResultSet result statement.executeQuery("SELECT * FROM host WHERE snmp_community'"+communaute+"'");

Voilà donc en gros j'ai une base de données Mysql qui me sert pour alimenter Cacti, l'outil de supervision.

Tout ça marche bien, j'ai les résultats avec :

             while(result.next())
             {
                 System.out.println(result.getString("hostname"));
                 i = i+1;
             }

             System.out.println("Il y a "+i+" entrées");
            conn.close();
        }
        catch(SQLException e)
        {
            System.out.println("erreur ConnexionBase"+e);
        }

Donc il me liste ce qu'il me faut, à savoir le nom des ordis utilisant la communauté snmp que je récupère par un textfield.

Mon problème est que je veux afficher justement ces noms d'ordis dans une liste en mode graphique, j'ai donc pensé à un JList (peut être que je me trompe lourdement)

Cependant voilà je ne sais pas comment faire, je suis débutant en Java... j'ai essayé avec un tableau mais à vrai dire je ne suis pas très doué.
En plus je n'ai qu'une seule colonne donc à afficher puisque après le filtre du SELECT en SQL il ne retourne qu'une colonne avec les noms des ordis..

Quelqu'un peut-il me mettre sur la voie svp? merci par avance
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 12 juin 2009 à 06:27
3
Merci
Dans FrameCommunaute:
    public class searchCommunaute implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            String communaute = SnmpField.getText();
            bdd_cacti_connexion objetConnect2 = new bdd_cacti_connexion();
            List list = objetConnect2.rechercheSnmp(communaute);
            for (Object object : list) {
                listModel.addElement(object);
            }
        }
    }

Dans bdd_cacti_connexion:
    public List rechercheSnmp(String communaute) {
        List results = new ArrayList();
        try {
            String url = "jdbc:odbc:cacti";
            Connection conn = DriverManager.getConnection(url);
            System.out.println("Connection MySQL effectuee\n\n\n");
            Statement statement = conn.createStatement();            ResultSet result statement.executeQuery("SELECT * FROM host WHERE snmp_community'" + communaute + "'");
            int i = 0;
            while (result.next()) {
                String name = result.getString("hostname");
                results.add(name);
                i = i + 1;
            }
            System.out.println("Il y a " + i + " entr es");
            conn.close();
        } catch (SQLException e) {
            System.out.println("erreur ConnexionBase" + e);
        }
        return results;
    }

Merci uhrand 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de uhrand
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 8 juin 2009 à 23:36
0
Merci
Avec JList nous pouvons utiliser un DefaultListModel et y ajouter les entrées, comme le montre l'exemple du tutoriel:
http://java.sun.com/docs/books/tutorial/uiswing/components/list.html
http://java.sun.com/docs/books/tutorial/uiswing/examples/components/ListDemoProject/src/components/ListDemo.java
C'est un peu pareille avec JTable.
Commenter la réponse de uhrand
oulanos 25 Messages postés vendredi 14 avril 2006Date d'inscription 10 mai 2010 Dernière intervention - 9 juin 2009 à 09:06
0
Merci
Bonjour, merci pour votre réponse

J'avais déjà vu cet exemple mais n'avais pas réussi à tout faire.

Cependant si c'est bien là la bonne direction je vais m'y pencher plus sérieusement dessus jusqu'à y arriver ^^

Bonne journée
Commenter la réponse de oulanos
oulanos 25 Messages postés vendredi 14 avril 2006Date d'inscription 10 mai 2010 Dernière intervention - 9 juin 2009 à 09:11
0
Merci
Le problème n'est pas de remplir le Jlist en statique mais à partir d'un résultat d'une requête dans un ResultSet... est-ce la même manière de procéder? désolé pour mes questions je n'ai que quelques jours de progra et c'est pas forcément évident :D
Commenter la réponse de oulanos
oulanos 25 Messages postés vendredi 14 avril 2006Date d'inscription 10 mai 2010 Dernière intervention - 12 juin 2009 à 09:28
0
Merci
WAOUW! mon sauveur!

Merci mille fois et désolé de vous avoir pris du temps, ça marche très bien!

Je vais étudier tout ça pour voir comment vous avez fait 'méthode + syntaxique'.

juste à un endroit Eclipse a un peu ralé:

 public void actionPerformed(ActionEvent e) {
            String communaute = SnmpField.getText();
            bdd_cacti_connexion objetConnect2 = new bdd_cacti_connexion();
    ===>        java.util.List list = objetConnect2.rechercheSnmp(communaute);
            for (Object object : list) {
                listModel.addElement(object);

List il aimait pas même après avoir fait un import de la librairie en haut, il m'a proposé java.util.List et là il est content.

Merci encore pour votre aide inestimable, je suis reparti dans mon projet!

Amicalement, Laurent
Commenter la réponse de oulanos
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 13 juin 2009 à 02:11
0
Merci
Le problème avec List provient du fait que java.util.List et java.awt.List sont des types incompatibles.
Ainsi, l'incompatibilité est résolu:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;
import java.awt.List;

Par la suite tu peus utiliser List sans spécifier le nom complet java.util.List.
Commenter la réponse de uhrand
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 13 juin 2009 à 02:15
0
Merci
Sorry:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;
import java.util.List;
Commenter la réponse de uhrand
cs_sara21 5 Messages postés samedi 16 juin 2007Date d'inscription 16 décembre 2009 Dernière intervention - 8 déc. 2009 à 14:56
0
Merci
l'IA
Bonjour Mr uhrand
je viens de tomber sur cette discussion,et j'essaye de trouver une solution a mon problème pour mon application dont je dois la terminer cette semaine et que ça fais presque 3semaines que je suis avec,ça ressemble a ce problème mais ce que je veux faire c'est :
- je lance une requète pour afficher la liste des produits dans JTable
- dans une boucle de While(R1.next()),je prend l'élément de la table produit et je vais lancer une requete qui va m'envoyé sa quantité et son prix unitaire de la table QPM .
- le resultat retourné sera sur la mm ligne du produit.

je travail avec PostgreSql et java.

voici un peu de ma fonction:
public void remplirTableau()
{

PreparedStatement ps,ps2;
ResultSet R,R2;
RefrechData(Produit);
try
{
String requete = "SELECT * FROM produit ORDER BY ordre ASC ";
String requete2 "SELECT qnt,prix,montant FROM qpm WHERE qpm.intitule ? and qpm.code_t = 1 and qpm.jour=? " ;
ps = SeConnecter.connectBase.prepareStatement(requete,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ps2 = SeConnecter.connectBase.prepareStatement(requete2,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
R = ps.executeQuery();
while (R.next() )
{ nbrE++;}

try
{
R.first();
int n=0,i=1;
do
{
R.absolute(i);
String prod = R.getString(1);
String ordre = R.getString(2);
// coté du produit
Produit[n][0]= ordre;
Produit[n][1]= prod;
try{
do {
ps2.setString(1,Produit[n][1]);
ps2.setString(2,jour.getText());
R2 = ps2.executeQuery();
R2.absolute(i);
String qpt = R2.getString(1);
String pu = R2.getString(2);
String Montant = R2.getString(3);
Produit[n][3]= qpt;
System.out.println("requete2 qpt + "+qpt);
Produit[n][4]= pu;
Produit[n][5]= Montant; }
while(R2.next());

}

catch (SQLException er)
{
System.out.println("Une erreur dans la fonction remplir:" + er);
}


n++;i++;

}while(R.next());
tableProd.setAutoResizeMode (JTable.AUTO_RESIZE_ALL_COLUMNS);
}
catch (SQLException error)
{
System.out.println("Une erreur dans la fonction visualiser le tout" + error);
}
ps.close();
ps2.close();

}

catch (SQLException error)
{
System.err.println("Erreur SQL Affiche contenu :" + error);
}
}

le problème:
il m'affiche que le resultat du premier produit,puis il m'afiche erreur
"org.postgresql.util.PSQLExecption : le ResulSet n'est pas positionné correctement,vous devez peux-être appeler next()"

SVP aidez moi je vous serez trés reconnaissante.
Merci
Commenter la réponse de cs_sara21

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.