Bonjour,

J'essaye tant bien que mal à apprendre à manier une bdd via java.
En cherchant sur le net et dans les bouquins, j'ai pu arrivé à ce résultat.
Je cherche à modifier une cellule et qu'elle soit enregistré dans la bdd avec un rafraichissement des cellules.
Mais voila, j'ai un problème dans ma methode setValueAt, j'ai essayé plusieurs combinaison en vain.

Merci

J'ai ce message d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at bd.ResultSetTableModel.setValueAt(ResultSetTableModel.java:96)
plus plusieurs lignes
Le model:

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 bd;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
 
import javax.naming.spi.DirStateFactory.Result;
import javax.swing.table.AbstractTableModel;
 
 
public class ResultSetTableModel extends AbstractTableModel
{
  public ResultSetTableModel( ResultSet resultSet )
  {
    this.resultSet = resultSet;
 
    try 
    {
      this.resultSetMetaData = resultSet.getMetaData();
    } 
    catch (SQLException e) 
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  @Override
  public int getColumnCount()
  {
	try 
    {
      return resultSetMetaData.getColumnCount();
    } 
    catch (SQLException e) 
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 0;
    }
  }
 
  @Override
  public int getRowCount()
  {
	try
    {
      resultSet.last();
      return resultSet.getRow();
    } 
	catch (SQLException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 0;
    }
  }
 
  @Override
  public Object getValueAt(int rowIndex, int columnIndex) 
  {
    try
    {
      resultSet.absolute( rowIndex + 1 );
      return resultSet.getObject(columnIndex + 1 );
    } 
    catch (SQLException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return null;
    }
  }
 
  @Override
  public String getColumnName( int column )
  {
    try 
    {
      return resultSetMetaData.getColumnName( column + 1 );
    } 
    catch (SQLException e) 
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return "";
    }
  }
 
 
  @Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
	// TODO Auto-generated method stub
 
		try {
			rowIndex = resultSet.getRow();
			columnIndex = resultSetMetaData.getColumnCount();
			data[rowIndex][columnIndex] = aValue;
			fireTableCellUpdated(rowIndex, columnIndex);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
 
}
 
  @Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
	// TODO Auto-generated method stub
	return true;
}
  private Object data[][];
  private ResultSet resultSet;
  private ResultSetMetaData resultSetMetaData;
Le panel

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
package bd;
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
 
 
public class TablePanel extends JPanel implements ActionListener
{
  public TablePanel( TableModel model )
  {
    table = new JTable( model );
    btn = new JButton("Sauver");
    setLayout( new BorderLayout() );
    add( new JScrollPane( table ), BorderLayout.CENTER );
    add (btn, BorderLayout.SOUTH);
    btn.addActionListener(this);
    //table.addMouseListener(this);
 
    table.addMouseListener(new MouseAdapter() {
    	  public void mouseClicked(MouseEvent e) {
    		    Point p = e.getPoint();
    		    int col = table.columnAtPoint(p);
    		    int row = table.rowAtPoint(p);
    		    if (table.isCellEditable(row, col)) {
    		    	table.editCellAt(row, col);
    		    	table.getEditorComponent().requestFocus();
    		    }
    	}
	});
 
  }
 
  private JTable table;
  private JButton btn;
  private Connection conn;
  @Override
  public void actionPerformed(ActionEvent e) {
  	Main.sauver();
 
  } 
 
}
le Main

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
 
package bd;
import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.swing.JFrame;
 
 
public class Main
{
  public static void main(String[] args)
  {
    Connection connection = getConnection();
    try
    {
        Statement st = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
                								   ResultSet.CONCUR_UPDATABLE );
        //st.executeUpdate("DELETE FROM Personne WHERE nom='kalal'");
        rs = st.executeQuery( "SELECT * FROM Personne" );
        ResultSetTableModel rtm = new ResultSetTableModel( rs );
 
        TablePanel tablePanel = new TablePanel( rtm );
 
        JFrame mainFrame = new JFrame( "Affiche table " );
        mainFrame.add( tablePanel, BorderLayout.CENTER );
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
        mainFrame.setSize( 640, 480 );
        mainFrame.setVisible( true );
    } 
    catch ( SQLException e )
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
 
  public static Connection getConnection()
    {
      Connection connection = null;
      boolean ok = false;
 
      //--- chargement en mémoire du pilote
      try
     {
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       ok = true;
     } 
     catch ( ClassNotFoundException e )
     {
       System.out.println( "ERREUR chargement du pilote: pilote non trouvé" );
       e.printStackTrace();
     }
 
     //--- connexion à la base de données
     if ( ok )
     {
       try
       {
         connection = DriverManager.getConnection("jdbc:odbc:bdformation","","");
         //connection.setAutoCommit(false);
       } 
       catch ( SQLException e )
       {
         System.out.println( "ERREUR de connexion à la base de données: " );
         e.printStackTrace();
       }
     }
 
      return connection;
    }
  public static void sauver(){
	  try {
		rs.updateRow();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
  }
 
    //--- attributs
 
    private static ResultSet rs = null;
}