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'erreurLe model:
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 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
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 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 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(); } }
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; }
Partager