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

Composants Java Discussion :

Jtable avec model + Dao + resultSet


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut Jtable avec model + Dao + resultSet
    Bonne rencontre,

    J’essaie désespérément de récupérer le résultat d’une query dans une JTable. J’essaie également de faire de la DAO mais je ne pense pas que c’est la source de mon problème.

    Je mets le résultat de ma query dans mon model mais quand j’attache celui-ci à ma table, c’est la catastrophe. Je reçois ce message :

    IWAV0052E Invocation Target Exception creating be.roose.vue.DesktopChambreListe
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher$1.run(JFCLauncher.java:59)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.lang.NullPointerException
    at be.roose.vue.DesktopChambreListe.<init>(DesktopChambreListe.java:72)
    ... 13 more
    Je me suis inspiré du code présent sur cette page :

    http://www.rgagnon.com/javadetails/java-0309.html

    Ma classe vue : (Je mets en gras le code qui me semble poser problème)

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    package be.roose.vue;
    
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JInternalFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.table.DefaultTableModel;
    
    import be.roose.connexion.ConnexionDB;
    import be.roose.connexion.DbParametre;
    import be.roose.model.ChambreDAO;
    import be.roose.model.ChambreDAOImpl;
    
    public class DesktopChambreListe extends JInternalFrame implements ActionListener{
    	
        private JPanel monPanel = new JPanel();
        private GridBagConstraints gbc = new GridBagConstraints();
        private JScrollPane maScrollPane;
        private JTable maTable;
        private String[] tableColumnsName = {"ID","Numero Chambre","Numero Tel","Libre"};  
        private JLabel numeroChambreLabel = new JLabel("Numero de Chambre");
        private JLabel telChambreLabel = new JLabel("Tel chambre");
        private JLabel libreChambreLabel = new JLabel("Libre");
        private JTextField numeroChambreField = new JTextField();
        private JTextField telChambreField = new JTextField();
        private JComboBox libreChambreCombo = new JComboBox();
        private JButton quitterBouton = new JButton("Quitter");
        private JButton rafraichirBouton = new JButton("Rafraichir");
        private JButton nouveauBouton = new JButton("Nouveau");
        private JButton supprimerBouton = new JButton("Supprimer");
    	
    	public DesktopChambreListe(){
    		this.setTitle("Liste des Chambres");
    		this.setClosable(true);
    		this.setResizable(true);
    		this.setSize(790, 500);
    		this.setVisible(true);
    		System.out.println("Chambre!");
    
    		// On récupére les informations de la base de donnée pour établir la connexion
    	   	ConnexionDB dbConf = new ConnexionDB();
    	   	DbParametre dbParametre = null;
        	try {
        		dbParametre=dbConf.processProperties();
    		} catch (IOException e1) {
    			e1.printStackTrace();
    			System.exit(1);
    		}
    		if (dbParametre == null) {
    			System.out.println("Pas d'information sur la DB!");
    			System.exit(1);
    		}
    		ChambreDAO chambreDAO = new ChambreDAOImpl(dbParametre);
    		
    		// Méthode pour obtenir les enregistements
    		chambreDAO.scanAllChambreDB();
    //		DefaultTableModel monModel = (DefaultTableModel) maTable.getModel();
    		DefaultTableModel monModel = new DefaultTableModel();
    		monModel.setColumnIdentifiers(tableColumnsName);
    		monModel.addRow(chambreDAO.getData());
    		this.maTable.setModel(monModel);
    		maScrollPane = new JScrollPane(maTable);
    		
    		// On défnit la combo
    		libreChambreCombo.addItem("Oui");
    		libreChambreCombo.addItem("Non");
    		
    		// On définit le Grid
    		
    		monPanel.setLayout(new GridBagLayout());
    		
    		// On place les Label
    		
    		gbc.fill = GridBagConstraints.BOTH;
    		gbc.insets = new Insets (10,10,10,10);
    		
    		gbc.gridx = 0;
    		gbc.gridy = 6;
    		monPanel.add(numeroChambreLabel,gbc);
    		gbc.gridx = 0;
    		gbc.gridy = 7;
    		monPanel.add(telChambreLabel,gbc);
    		gbc.gridx = 0;
    		gbc.gridy = 8;
    		monPanel.add(libreChambreLabel,gbc);
    
    		// On place les TextField
    		
    		gbc.gridx = 1;
    		gbc.gridy = 6;
    		gbc.weightx=50;
    		monPanel.add(numeroChambreField,gbc);
    		gbc.gridx = 1;
    		gbc.gridy = 7;
    		monPanel.add(telChambreField,gbc);
    		gbc.gridx = 1;
    		gbc.gridy = 8;
    		monPanel.add(libreChambreCombo,gbc);
    		
    		// On place les boutons
    		gbc.weightx=0;
    		gbc.weighty=0;
    		gbc.gridx = 2;
    		gbc.gridy = 9;
    		monPanel.add(nouveauBouton,gbc);
    		gbc.gridx = 3;
    		gbc.gridy = 9;
    		monPanel.add(supprimerBouton,gbc);
    		gbc.gridx = 4;
    		gbc.gridy = 9;
    		monPanel.add(rafraichirBouton,gbc);
    		gbc.gridx = 5;
    		gbc.gridy = 9;
    		monPanel.add(quitterBouton,gbc);
    		
    		// On place la table
    		gbc.gridx = 0;
    		gbc.gridy = 0;
    		gbc.gridwidth = 6;
    		gbc.gridheight = 6;
    		gbc.weightx=100;
    		gbc.weighty=100;
    		monPanel.add(maScrollPane,gbc);
    		
    		// On attache monPanel
    		this.getContentPane().add(monPanel);
    		
    		// Ecouteur
    		
    		quitterBouton.addActionListener(this);
    		
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent event) {
    		// On ferme la JInternalFrame
    		this.dispose();
    
    	}
    
    }
    Ma classe DAOImpl

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    package be.roose.model;
     
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import be.roose.connexion.DbParametre;
    import be.roose.query.MesQuery;
     
     
    public class ChambreDAOImpl implements ChambreDAO {
     
    	/** Connexion à la base de données */
    	private Connection connexion;
    	/** Statement pour les query */
    	private Statement statement;
    	/** Results of the scanning of the database */
    	private ResultSet resultSet;	
    	/** Parameters to access the database */
    	private DbParametre dbParametre;
    	/** Parametre de la query */
    	private MesQuery maQuery;
    	/** Objet qui contient les résultats de la table */
    	private Object[]data;
     
     
     
    	/** Constructeur de base */
    	public ChambreDAOImpl() {
    		throw new UnsupportedOperationException(
    				"Pour avoir accès au DB, les paramètres sont nécessaires ");
    	}
     
    	/** constructeur qui reçoit les paramètres de la base */
    	public ChambreDAOImpl(DbParametre dbParametre) {
    		this.dbParametre = dbParametre;
    		maQuery = new MesQuery("CHAMBRE");
    	}
     
    	@Override
    	public void deleteChambreDB(ChambreTO chambre) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void insertChambreDB(ChambreTO chambre) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void scanAllChambreDB() {
    		try {
    			Class.forName(dbParametre.getProtocol()).newInstance();
            	connexion=DriverManager.getConnection(dbParametre.getUrldb()
            		 , dbParametre.getUser(), dbParametre.getPassword());
            	statement=connexion.createStatement();
            	resultSet=statement.executeQuery(maQuery.voirTable());       
            	ResultSetMetaData rsmd = resultSet.getMetaData();
            	int colNo = rsmd.getColumnCount();
            	while(resultSet.next()){
            	 Object[] data = new Object[colNo];
            	 for(int i=0;i<colNo;i++){
            		 data[i]=resultSet.getObject(i+1);
            		 System.out.println(data[i]);
            	  }
            	}
     
            } catch (InstantiationException e) {
                e.printStackTrace();
            	System.out.println("1");
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            	System.out.println("2");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            	System.out.println("3");
             } 
            catch (SQLException e) {
                e.printStackTrace();
            	System.out.println("4");
             }
     
            finally {
            	try {
    				connexion.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
            	try {
    				statement.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
            }
    	}
     
    	public Object[] getData() {
    		return data;
    	}
     
     
    	@Override
    	public void updateChambreDB(ChambreTO chambre) {
    		// TODO Auto-generated method stub
     
    	}
     
     
    }
    Ma classe ConnexionDB qui va lire les informations de connexion dans un fichier

    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
    package be.roose.connexion;
     
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
     
    public class ConnexionDB {
     
    	/** Default Constructor */
    	public ConnexionDB() {}
     
    	/**
             * Configuration des paramètres pour la base de données
             * @throws IOException si le fichier n'est pas trouvé
             */
    	public DbParametre processProperties() throws IOException {
       	 	Properties properties = new Properties();
    		FileInputStream fileInputStream = new FileInputStream("conf/connection.properties");
    		properties.load(fileInputStream);
    		DbParametre dbParametre = new DbParametre();
    		dbParametre.setUser((String) properties.getProperty("User"));
    		dbParametre.setPassword((String) properties.getProperty("Password"));
    		dbParametre.setUrldb((String) properties.getProperty("Urldb"));
    		dbParametre.setProtocol((String) properties.getProperty("Protocol"));
    		return dbParametre;
    	}
     
    }
    Ma classe DbParametre qui sert a établir la connexion

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    package be.roose.connexion;
     
    public class DbParametre {
    	/** Protocol de la base de données      */
    	private String protocol;
    	/** url de la base de données   */
    	private String urldb;
    	/** utilisateur de la base de données   */
    	private String user;
    	/** Mot de passe de la base de données  */
    	private String password;
     
    //	public DbParametre(){}
     
    	public String getProtocol() {
    		return protocol;
    	}
     
    	public void setProtocol(String protocol) {
    		this.protocol = protocol;
    	}
     
    	public String getUrldb() {
    		return urldb;
    	}
     
    	public void setUrldb(String urldb) {
    		this.urldb = urldb;
    	}
     
    	public String getUser() {
    		return user;
    	}
     
    	public void setUser(String user) {
    		this.user = user;
    	}
     
    	public String getPassword() {
    		return password;
    	}
     
    	public void setPassword(String password) {
    		this.password = password;
    	}
     
    	public String toString() {
    		// On utilise StringBuffer pour éviter les instanciation a répétition
    		StringBuffer stringBuffer = new StringBuffer();
    		stringBuffer.append("Address DB:" + getUrldb() + "/");
    		stringBuffer.append("User to access DB:" + getUser() + "/");
    		stringBuffer.append("Password to access DB:" + getPassword() + "/");
    		stringBuffer.append("Protocol to access DB:" + getProtocol() + "/");
    		return stringBuffer.toString();
    	}
     
    }
    Un grand merci d’avance,
    Raphaël.

    PS : Si vous avez des conseils pour améliorer mon code, je suis preneur. J’ai souvent l’impression que ma formation de base n’est pas assez solide et que je programme n’importe comment… Enfin, j'ai surtout ce sentiment en Java et c'est très frustrant.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Ce ne serait pas cette ligne qui pose problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Class.forName(dbParametre.getProtocol()).newInstance();
    Que te renvoie getProtocol ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    Non à ce niveau là, j'ai importé un jar dans mon projet "mysql-connector-java-3.1.12-bin.jar"

    getProtocol me donne ceci : com.mysql.jdbc.Driver

    Je n'ai pas de soucis pour accéder à ma base de données et je sais afficher les résultats en console. J'ai effectué plusieurs tests à ce niveau pour m'assurer que je peux attaquer ma DB. C'est vraiment quand je veux les mettre dans ma JTable.

    Merci pour votre aide.

    Raphaël.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Raphael1980 Voir le message
    Caused by: java.lang.NullPointerException
    at be.roose.vue.DesktopChambreListe.<init>(DesktopChambreListe.java:72)
    Citation Envoyé par Raphael1980 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        private JTable maTable;
    Citation Envoyé par Raphael1980 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        this.maTable.setModel(monModel);
    Une NulllPointerException, une variable d'instance jamais utilisé, mais pourtant bien utilisé...

    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    Effectivement...

    Merci à toi mais maintenant bien que mon programme ne se plante plus, je n'ai rien dans ma table.

    C'est à cause de ça sans doute ?

    monModel.addRow(chambreDAO.getData()); qui retourne un tableau d'objet contenant les résultats de ma query.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    Je viens de modifier la méthode scanAllChambreDB() de la classe ChambreDAOImpl mais je n'ai toujours pas d'affichage. J'utilise une matrice d'objets qui me semble plus clair dans la logique. Et surtout que je ne fais pas une instanciation dans la boucle While du resultset. J'ai laissé l'ancien code en commentaire.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    	public void scanAllChambreDB() {
    		try {
    			Class.forName(dbParametre.getProtocol()).newInstance();
            	connexion=DriverManager.getConnection(dbParametre.getUrldb()
            		 , dbParametre.getUser(), dbParametre.getPassword());
            	statement=connexion.createStatement();
            	resultSet=statement.executeQuery(maQuery.voirTable());       
            	ResultSetMetaData rsmd = resultSet.getMetaData();
            	int colNo = rsmd.getColumnCount();
            	//on place le curseur sur le dernier tuple
            	resultSet.last();
            	//on récupère le numéro de la ligne
            	int nombreLignes = resultSet.getRow();
            	//on repace le curseur avant la première ligne
            	resultSet.beforeFirst(); 
            	Object[][] data = new Object[nombreLignes][colNo];
            	int i=0;
            	while(resultSet.next()|| i<nombreLignes){
            			for(int j=0;j<colNo;j++){
            				data[i][j]=resultSet.getObject(j+1);
            			}
            		i++;	
           	 	}
            	// On vérifie le contenu de data
            	for(i=0;i<nombreLignes;i++)
            		for(int j=0;j<colNo;j++)
        				System.out.println(data[i][j]);
     
     
    //        	while(resultSet.next()){
    //        	 Object[] data = new Object[colNo];
    //        	 for(int i=0;i<colNo;i++){
    //        		 data[i]=resultSet.getObject(i+1);
    //        		 System.out.println(data[i]);
    //        	  }
    //        	}
     
            } catch (InstantiationException e) {
                e.printStackTrace();
            	System.out.println("1");
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            	System.out.println("2");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            	System.out.println("3");
             } 
            catch (SQLException e) {
                e.printStackTrace();
            	System.out.println("4");
             }
     
            finally {
            	try {
    				connexion.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
            	try {
    				statement.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
            }
    	}

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    Misère comme je galère...

    Je viens d'essayer directement de passer ma matrice d'objets dans ma JTable et non plus passer par un modèle mais j'ai un java.lang.NullPointerException.

    Ma classe vue

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    package be.roose.vue;
     
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
     
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JInternalFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.table.DefaultTableModel;
     
    import be.roose.connexion.ConnexionDB;
    import be.roose.connexion.DbParametre;
    import be.roose.model.ChambreDAO;
    import be.roose.model.ChambreDAOImpl;
     
    public class DesktopChambreListe extends JInternalFrame implements ActionListener{
     
        private JPanel monPanel = new JPanel();
        private GridBagConstraints gbc = new GridBagConstraints();
        private JScrollPane maScrollPane;
    //    private JTable maTable= new JTable();
        private JTable maTable;
        private String[] tableColumnsName = {"ID","Numero Chambre","Numero Tel","Libre"};  
        private JLabel numeroChambreLabel = new JLabel("Numero de Chambre");
        private JLabel telChambreLabel = new JLabel("Tel chambre");
        private JLabel libreChambreLabel = new JLabel("Libre");
        private JTextField numeroChambreField = new JTextField();
        private JTextField telChambreField = new JTextField();
        private JComboBox libreChambreCombo = new JComboBox();
        private JButton quitterBouton = new JButton("Quitter");
        private JButton rafraichirBouton = new JButton("Rafraichir");
        private JButton nouveauBouton = new JButton("Nouveau");
        private JButton supprimerBouton = new JButton("Supprimer");
     
    	public DesktopChambreListe(){
    		this.setTitle("Liste des Chambres");
    		this.setClosable(true);
    		this.setResizable(true);
    		this.setSize(790, 500);
    		this.setVisible(true);
    		System.out.println("Chambre!");
     
    		// On récupére les informations de la base de donnée pour établir la connexion
    	   	ConnexionDB dbConf = new ConnexionDB();
    	   	DbParametre dbParametre = null;
        	try {
        		dbParametre=dbConf.processProperties();
    		} catch (IOException e1) {
    			e1.printStackTrace();
    			System.exit(1);
    		}
    		if (dbParametre == null) {
    			System.out.println("Pas d'information sur la DB!");
    			System.exit(1);
    		}
    		ChambreDAO chambreDAO = new ChambreDAOImpl(dbParametre);
     
    		// Méthode pour obtenir les enregistements
    		chambreDAO.scanAllChambreDB();
    //		DefaultTableModel monModel = (DefaultTableModel) maTable.getModel();
    //		DefaultTableModel monModel = new DefaultTableModel();
    //		monModel.setColumnIdentifiers(tableColumnsName);
    //		monModel.addRow(chambreDAO.getData());
    //		this.maTable.setModel(monModel);
    		maTable = new JTable(chambreDAO.getData(),tableColumnsName);
    		maScrollPane = new JScrollPane(maTable);
     
    		// On défnit la combo
    		libreChambreCombo.addItem("Oui");
    		libreChambreCombo.addItem("Non");
     
    		// On définit le Grid
     
    		monPanel.setLayout(new GridBagLayout());
     
    		// On place les Label
     
    		gbc.fill = GridBagConstraints.BOTH;
    		gbc.insets = new Insets (10,10,10,10);
     
    		gbc.gridx = 0;
    		gbc.gridy = 6;
    		monPanel.add(numeroChambreLabel,gbc);
    		gbc.gridx = 0;
    		gbc.gridy = 7;
    		monPanel.add(telChambreLabel,gbc);
    		gbc.gridx = 0;
    		gbc.gridy = 8;
    		monPanel.add(libreChambreLabel,gbc);
     
    		// On place les TextField
     
    		gbc.gridx = 1;
    		gbc.gridy = 6;
    		gbc.weightx=50;
    		monPanel.add(numeroChambreField,gbc);
    		gbc.gridx = 1;
    		gbc.gridy = 7;
    		monPanel.add(telChambreField,gbc);
    		gbc.gridx = 1;
    		gbc.gridy = 8;
    		monPanel.add(libreChambreCombo,gbc);
     
    		// On place les boutons
    		gbc.weightx=0;
    		gbc.weighty=0;
    		gbc.gridx = 2;
    		gbc.gridy = 9;
    		monPanel.add(nouveauBouton,gbc);
    		gbc.gridx = 3;
    		gbc.gridy = 9;
    		monPanel.add(supprimerBouton,gbc);
    		gbc.gridx = 4;
    		gbc.gridy = 9;
    		monPanel.add(rafraichirBouton,gbc);
    		gbc.gridx = 5;
    		gbc.gridy = 9;
    		monPanel.add(quitterBouton,gbc);
     
    		// On place la table
    		gbc.gridx = 0;
    		gbc.gridy = 0;
    		gbc.gridwidth = 6;
    		gbc.gridheight = 6;
    		gbc.weightx=100;
    		gbc.weighty=100;
    		monPanel.add(maScrollPane,gbc);
     
    		// On attache monPanel
    		this.getContentPane().add(monPanel);
     
    		// Ecouteur
     
    		quitterBouton.addActionListener(this);
     
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent event) {
    		// On ferme la JInternalFrame
    		this.dispose();
     
    	}
     
    }
    Ma classe Dao Impl

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    package be.roose.model;
     
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import be.roose.connexion.DbParametre;
    import be.roose.query.MesQuery;
     
     
    public class ChambreDAOImpl implements ChambreDAO {
     
    	/** Connexion à la base de données */
    	private Connection connexion;
    	/** Statement pour les query */
    	private Statement statement;
    	/** Results of the scanning of the database */
    	private ResultSet resultSet;	
    	/** Parametres to access the database */
    	private DbParametre dbParametre;
    	/** Parametre de la query */
    	private MesQuery maQuery;
    	/** Objet qui contient les résultats de la table */
    	private Object[][]data;
     
     
     
    	/** Constructeur de base */
    	public ChambreDAOImpl() {
    		throw new UnsupportedOperationException(
    				"Pour avoir accès au DB, les paramètres sont nécessaires ");
    	}
     
    	/** constructeur qui reçoit les paramètres de la base */
    	public ChambreDAOImpl(DbParametre dbParametre) {
    		this.dbParametre = dbParametre;
    		maQuery = new MesQuery("CHAMBRE");
    	}
     
    	@Override
    	public void deleteChambreDB(ChambreTO chambre) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void insertChambreDB(ChambreTO chambre) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void scanAllChambreDB() {
    		try {
    			Class.forName(dbParametre.getProtocol()).newInstance();
            	connexion=DriverManager.getConnection(dbParametre.getUrldb()
            		 , dbParametre.getUser(), dbParametre.getPassword());
            	statement=connexion.createStatement();
            	resultSet=statement.executeQuery(maQuery.voirTable());       
            	ResultSetMetaData rsmd = resultSet.getMetaData();
            	int colNo = rsmd.getColumnCount();
            	//on place le curseur sur le dernier tuple
            	resultSet.last();
            	//on récupère le numéro de la ligne
            	int nombreLignes = resultSet.getRow();
            	//on repace le curseur avant la première ligne
            	resultSet.beforeFirst(); 
            	Object[][] data = new Object[nombreLignes][colNo];
     
            	int i=0;
            	while(resultSet.next()|| i<nombreLignes){
            			for(int j=0;j<colNo;j++){
            				data[i][j]=resultSet.getObject(j+1);
            			}
            		i++;	
           	 	}
            	// On vérifie le contenu de data
            	for(i=0;i<nombreLignes;i++)
            		for(int j=0;j<colNo;j++)
        				System.out.println(data[i][j]);
     
     
    //        	while(resultSet.next()){
    //        	 Object[] data = new Object[colNo];
    //        	 for(int i=0;i<colNo;i++){
    //        		 data[i]=resultSet.getObject(i+1);
    //        		 System.out.println(data[i]);
    //        	  }
    //        	}
     
            } catch (InstantiationException e) {
                e.printStackTrace();
            	System.out.println("1");
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            	System.out.println("2");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            	System.out.println("3");
             } 
            catch (SQLException e) {
                e.printStackTrace();
            	System.out.println("4");
             }
     
            finally {
            	try {
    				connexion.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
            	try {
    				statement.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
            }
    	}
     
    	public Object[][] getData() {
    		return data;
    	}
     
     
    	@Override
    	public void updateChambreDB(ChambreTO chambre) {
    		// TODO Auto-generated method stub
     
    	}
     
     
    }
    Le message d'erreur :

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.JTable$1.getRowCount(Unknown Source)
    at javax.swing.JTable.getRowCount(Unknown Source)
    at javax.swing.plaf.basic.BasicTableUI.createTableSize(Unknown Source)
    at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at javax.swing.JViewport.getViewSize(Unknown Source)
    at javax.swing.ScrollPaneLayout.preferredLayoutSize(Unknown Source)
    at java.awt.Container.preferredSize(Unknown Source)
    at java.awt.Container.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at java.awt.GridBagLayout.GetLayoutInfo(Unknown Source)
    at java.awt.GridBagLayout.getLayoutInfo(Unknown Source)
    at java.awt.GridBagLayout.ArrangeGrid(Unknown Source)
    at java.awt.GridBagLayout.arrangeGrid(Unknown Source)
    at java.awt.GridBagLayout.layoutContainer(Unknown Source)
    at java.awt.Container.layout(Unknown Source)
    at java.awt.Container.doLayout(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validate(Unknown Source)
    at javax.swing.JInternalFrame.reshape(Unknown Source)
    at java.awt.Component.setBounds(Unknown Source)
    at java.awt.BorderLayout.layoutContainer(Unknown Source)
    at java.awt.Container.layout(Unknown Source)
    at java.awt.Container.doLayout(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validate(Unknown Source)
    at java.awt.Window.show(Unknown Source)
    at java.awt.Component.show(Unknown Source)
    at java.awt.Component.setVisible(Unknown Source)
    at java.awt.Window.setVisible(Unknown Source)
    at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher.launchWindow(JFCLauncher.java:138)
    at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher.launchJComponent(JFCLauncher.java:123)
    at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher$1.run(JFCLauncher.java:111)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.JTable$1.getRowCount(Unknown Source)
    at javax.swing.JTable.getRowCount(Unknown Source)
    at javax.swing.plaf.basic.BasicTableUI.createTableSize(Unknown Source)
    at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at javax.swing.JViewport.getViewSize(Unknown Source)
    at javax.swing.ScrollPaneLayout.preferredLayoutSize(Unknown Source)
    at java.awt.Container.preferredSize(Unknown Source)
    at java.awt.Container.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at java.awt.GridBagLayout.GetLayoutInfo(Unknown Source)
    at java.awt.GridBagLayout.getLayoutInfo(Unknown Source)
    at java.awt.GridBagLayout.ArrangeGrid(Unknown Source)
    at java.awt.GridBagLayout.arrangeGrid(Unknown Source)
    at java.awt.GridBagLayout.layoutContainer(Unknown Source)
    at java.awt.Container.layout(Unknown Source)
    at java.awt.Container.doLayout(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validate(Unknown Source)
    at javax.swing.plaf.basic.BasicInternalFrameUI$Handler.componentResized(Unknown Source)
    at java.awt.AWTEventMulticaster.componentResized(Unknown Source)
    at java.awt.Component.processComponentEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    J'ai contrôlé à plusieurs reprises ma matrice d'objets dans la classe Dao Impl et elle contient bien mes résultats.

    C'est vraiment quand je récupère cette matrice et que je l'attache a ma JTable ou à mon modèle.

    C'est sans doute une bêtise que je loupe quelques part mais vu que je dois rendre mon projet pour lundi et que je dois encore faire les updates... Je commence a stresser.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    C'est ok !

    J'avais oublié de remplir la variable d'instance avant de la récupérée via le Get...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jtable avec model, avec une colonne JComboBox avec model
    Par rednight dans le forum Composants
    Réponses: 2
    Dernier message: 18/11/2013, 11h58
  2. Jtable avec model personnalisé
    Par Raphael1980 dans le forum Composants
    Réponses: 2
    Dernier message: 03/03/2009, 21h02
  3. Jtable créée avec model et filtre, probleme de tri
    Par pequina dans le forum Composants
    Réponses: 18
    Dernier message: 04/08/2006, 09h24
  4. [Swing][JTable]pb de header avec Model
    Par yoshï dans le forum Composants
    Réponses: 2
    Dernier message: 19/04/2006, 11h01
  5. Problèmes d'affiche du header de mon JTable avec un Model
    Par Baptiste Wicht dans le forum Composants
    Réponses: 16
    Dernier message: 08/02/2006, 18h37

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