Modifier et rafraichir cellule JTable
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:
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:
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:
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:
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;
} |