Editable jtable

Status
Niet open voor verdere reacties.

bryan698690

Nieuwe gebruiker
Lid geworden
29 nov 2015
Berichten
1
Hoi,

ik heb een editable jtable. deze tabel heeft een connectie met een database. ik probeer een waarde in een cell te wijzigen en vervolgens deze wijziging op te slaan in de database. hieronder heb ik een voorbeeld waarmee ik dit tracht te doen. kan iemand mij op weg helpen dit probleem op te lossen.

alvast bedankt,
bryan

private void btnupdatetablenawActionPerformed(java.awt.event.ActionEvent evt) {


try {
int col=tblnaw.getSelectedColumn();
int row=tblnaw.getSelectedRow();
String sql = "UPDATE naw SET voornaam = ?,tussenvoegsel = ?,achternaam = ? WHERE id = "+row;

pst=conn.prepareStatement(sql);

pst.setString(1, (String) tblnaw.getValueAt(row, 1));
pst.setString(2, (String) tblnaw.getValueAt(row, 2));
pst.setString(3, (String) tblnaw.getValueAt(row, 3));

pst.executeUpdate();

} catch (Exception ex) {
ex.printStackTrace();
}
}
 
ik geef je een voorbeeldje met een knop(best ga je naar java FX is sneller en gemakelijker)

Code:
class  DeleteButton extends JButton{
 		private boolean isdel = false;
		private String filename;
 		public DeleteButton(String label) {	super(label); }
 		public void addDeleteAction(String fname){
 			this.filename = fname;
			addActionListener(new ActionListener(){
 				public void actionPerformed(ActionEvent event){
 					OptionPane.showMessageDialog(null,"delete:"+ filename);
				}
			});
		}
	}

Code:
class  BtnEditor extends DefaultCellEditor {
 		private static final long serialVersionUID = -8288275145189943807L;
 		public BtnEditor(JCheckBox checkBox) {
 			super(checkBox);
		}
 		public Component getTableCellEditorComponent(JTable table, Object value,
 			boolean isSelected, int row, int column) {
 			DeleteButton  button = new DeleteButton("delete me" +"x:"+row+"y:"+column);
 			button.addDeleteAction((value == null) ? "" : value.toString());
 			return button;
		}

 }

Code:
class  ButtonRenderer implements TableCellRenderer {
 		private static final long serialVersionUID = 1608552702791284570L;
 		public Component getTableCellRendererComponent(JTable table, 
          Object value,boolean isSelected, boolean hasFocus, int row, int column) {
 			return new JButton("delme");
		}
}

dit is je panneel dan waar de render en celeditor wordt toegevoegd(de celeditor zal je ook nodig hebben)
Code:
public Deletepanel(Vector vector, Dimension size){
....
    	table = new JTable(new DeleteTableModel(vector));

		table.getColumn("delete").setCellRenderer(new ButtonRenderer());
		table.getColumn("delete").setCellEditor(new BtnEditor(new JCheckBox()));
        		add(new JScrollPane(table));
    }
...

dit is hoe je tabel er zal uit zien
Code:
public class DeleteTableModel extends AbstractTableModel {
	private Vector<MyFileItem> todel = new Vector<MyFileItem>();
	private static final String columnNames[] = {"name", "Digest","delete"};
...
database uitleg

Code:
 1 public static String getFirstName (int personKey) throws Exception {
 2    Connection connection = null;
 3    PreparedStatement statement = null;
 4    try {
 5       connection = poolMgr.getConnection();
 6       final String sql = "select firstName from person where personKey = ?";
 7       statement = connection.prepareStatement(sql);
 8       statement.setInt (1, personKey);
 9       ResultSet rs = statement.executeQuery();
 10       if (!rs.next()) throw new Exception ("Person not found);
 11       return rs.getString(1); }
 12     finally {
 13       if (statement != null) statement.close();
 14       if (connection != null) connection.close(); }}
Actions to create a database

1.try {
2.      Statement stmt;
3. //Registreer de JDBC driver voor MySQL.
4.      Class.forName("com.mysql.jdbc.Driver");
5. //Definieer de URL van de mysql server op de localhost
6.       String url = "jdbc:mysql://localhost";
7. //maak een connection aan naar een database voor een 
8. //gebruiker met de naam root en een blank wachtwoord.
9. //Deze gebruiker is de standaard administrator met alle rechten
10.       Connection con = DriverManager.getConnection(url,"root", "");
11.  //maak een Statement object 
12.       stmt = con.createStatement();
een nieuwe database maken
13.         stmt.executeUpdate("CREATE DATABASE " + input1Field.getText()); 	
de gegevens in de recordset lezen
14.         rs = stmt.executeQuery("SELECT voornaam,naam,tel FROM test");
15. // eerste record in de recordset  selecteren
16.      	rs.first();
Datainvoegen
17. //voeg de gegevens toe
18.stmt.executeUpdate("INSERT INTO "+ input2Field.getText() + "(voornaam,naam,tel) VALUES('" + input3Field.getText() + "','" + input4Field.getText() + "','" + input5Field.getText() + "')"); 
Datainvoegen 2 uitgebreiding
 1 stmt.executeUpdate("INSERT INTO autoIncTutorial (dataField) "
 2           + "values ('Can I Get the Auto Increment Field?')");
 3 int autoIncKeyFromFunc = -1;
 4 rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
 5 if (rs.next()) {
 6         autoIncKeyFromFunc = rs.getInt(1);
 7 } else {
 8         // throw an exception from here
 9 }
 10 rs.close();
 11 System.out.println("Key return" + "'SELECT LAST_INSERT_ID()': "+ autoIncKeyFromFunc);
Connectie sluiten
1.  //sluit de connection
2.       con.close();             
3.    	}	
4.    	         catch( Exception e ) { e.printStackTrace();  }
5.}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan