title: Tableview update database on edit
body: <p>So the thing that i want to happen, is making the tableview update the data in the database after editing it. I wanted to use the SetOnEditCommit method here. The cell editing does work, but it never gets updated, with no error either. In the first place im a bit clueless if this method is actually efficient (probably not), since its hard to find some sources for this specific thing. And the sources that i found weren't really helpful. So it would be nice if someone had an idea as to why it doesn't update, or maybe provide an alternate option here.</p>
  
  <p>The mentioned part:</p>
  
  <pre><code>    columnType.setOnEditCommit(new EventHandler&lt;TableColumn.CellEditEvent&lt;UserDetails, String&gt;&gt;() {
              @Override
              public void handle(TableColumn.CellEditEvent&lt;UserDetails, String&gt; event) {
                updataData();
              }
          });
  
          tableview.setItems(null);
          tableview.setItems(data);
  
      }
  
  
      public void updataData() {
          Connection connection = null;
          try {
              connection = DriverManager.getConnection("jdbc:mysql://37.128.148.113:3306/FYS", "FYS", "Kcj8g87~");
              Statement con = connection.createStatement();
              //connection
              TablePosition pos = tableview.getSelectionModel().getSelectedCells().get(0);
              int row = pos.getRow();
              TableColumn col = pos.getTableColumn();
               String data1 = (String) col.getCellObservableValue(row).getValue();
              //cell
              UserDetails row1 = tableview.getSelectionModel().getSelectedItem();
              c1 = row1.getId();
              //row
              //tableview variables
              con.execute("UPDATE gevonden_bagage SET  type = 'data1' WHERE koffer_id = 'c1' ");
              //Query       
          } catch (SQLException ex) {
              System.err.println("Error" + ex);
          }
      }
  //get connection, get celldata, get id data from first row, update cell with selected id
  </code></pre>
  
  <p>full controller class:</p>
  
  <pre><code>package simple;
  
  import java.net.URL;
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.sql.Statement;
  import java.util.ResourceBundle;
  import javafx.collections.FXCollections;
  import javafx.collections.ObservableList;
  import javafx.event.EventHandler;
  import javafx.fxml.FXML;
  import javafx.fxml.Initializable;
  import javafx.scene.control.Button;
  import javafx.scene.control.TableColumn;
  import javafx.scene.control.TablePosition;
  
  import javafx.scene.control.TableView;
  import javafx.scene.control.cell.PropertyValueFactory;
  import javafx.scene.control.cell.TextFieldTableCell;
  
  /**
   *
   * @author admin
   */
  public class FXMLUserController extends SimpleController implements Initializable {
  
      @FXML
      public TableView&lt;UserDetails&gt; tableview;
      @FXML
      public TableColumn&lt;UserDetails, String&gt; columnId;
      @FXML
      public TableColumn&lt;UserDetails, String&gt; columnType;
      @FXML
      public TableColumn&lt;UserDetails, String&gt; columnKleur;
      @FXML
      public TableColumn&lt;UserDetails, String&gt; columnLuchthaven;
      @FXML
      public TableColumn&lt;UserDetails, String&gt; columnKenmerken;
      @FXML
      public TableColumn&lt;UserDetails, String&gt; columnStatus;
      @FXML
      public TableColumn&lt;UserDetails, String&gt; columnDatum;
      @FXML
      private Button btnLoad;
      //declare observable list for database data
      private ObservableList&lt;UserDetails&gt; data;
      private DbConnection dc;
      String c1;
  
      @FXML
  
  //strings for getRow method
      @Override
      public void initialize(URL url, ResourceBundle rb) {
          dc = new DbConnection();
          loadDataFromDatabase();
      }
  
      @FXML
      public void loadDataFromDatabase() {
          try {
              Connection conn = dc.Connect();
              data = FXCollections.observableArrayList();
              // Execute query and store result in a resultset
              ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM gevonden_bagage");
              while (rs.next()) {
                  //get strings
                  data.add(new UserDetails(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5),
                          rs.getString(6), rs.getString(7)));
              }
  
          } catch (SQLException ex) {
              System.err.println("Error" + ex);
          }
  
          //Set cell values to tableview.
          tableview.setEditable(true);
          tableview.getSelectionModel().setCellSelectionEnabled(true);
  
          columnType.setCellFactory(TextFieldTableCell.forTableColumn());
          columnKleur.setCellFactory(TextFieldTableCell.forTableColumn());
          columnLuchthaven.setCellFactory(TextFieldTableCell.forTableColumn());
          columnKenmerken.setCellFactory(TextFieldTableCell.forTableColumn());
          columnStatus.setCellFactory(TextFieldTableCell.forTableColumn());
          columnDatum.setCellFactory(TextFieldTableCell.forTableColumn());
  //makes columns editable
          columnId.setCellValueFactory(new PropertyValueFactory&lt;&gt;("id"));
          columnType.setCellValueFactory(new PropertyValueFactory&lt;&gt;("type"));
          columnKleur.setCellValueFactory(new PropertyValueFactory&lt;&gt;("kleur"));
          columnLuchthaven.setCellValueFactory(new PropertyValueFactory&lt;&gt;("luchthaven"));
          columnKenmerken.setCellValueFactory(new PropertyValueFactory&lt;&gt;("kenmerken"));
          columnStatus.setCellValueFactory(new PropertyValueFactory&lt;&gt;("status"));
          columnDatum.setCellValueFactory(new PropertyValueFactory&lt;&gt;("datum"));
  
      columnType.setOnEditCommit(new EventHandler&lt;TableColumn.CellEditEvent&lt;UserDetails, String&gt;&gt;() {
              @Override
              public void handle(TableColumn.CellEditEvent&lt;UserDetails, String&gt; event) {
                updataData();
              }
          });
  
          tableview.setItems(null);
          tableview.setItems(data);
  
      }
  
  
      public void updataData() {
          Connection connection = null;
          try {
              connection = DriverManager.getConnection("jdbc:mysql://37.128.148.113:3306/FYS", "FYS", "Kcj8g87~");
              Statement con = connection.createStatement();
              //connection
              TablePosition pos = tableview.getSelectionModel().getSelectedCells().get(0);
              int row = pos.getRow();
              TableColumn col = pos.getTableColumn();
               String data1 = (String) col.getCellObservableValue(row).getValue();
              //cell
              UserDetails row1 = tableview.getSelectionModel().getSelectedItem();
              c1 = row1.getId();
              //row
              //tableview variables
              con.execute("UPDATE gevonden_bagage SET  type = 'data1' WHERE koffer_id = 'c1' ");
              //Query       
          } catch (SQLException ex) {
              System.err.println("Error" + ex);
          }
      }
  //get connection, get celldata, get id data from first row, update cell with selected id
      @FXML
      public void getRow() {
  
          TablePosition pos = tableview.getSelectionModel().getSelectedCells().get(0);
          int row = pos.getRow();
          TableColumn col = pos.getTableColumn();
  // this gives the value in the selected cell:
          String data1 = (String) col.getCellObservableValue(row).getValue();
          System.out.println(data1);
  //CURRENTLY UNUSED METHOD
      }
  
  }
  </code></pre>
  
  <p>Model class:</p>
  
  <pre><code>import javafx.beans.property.SimpleStringProperty;
  import javafx.beans.property.StringProperty;
  
  /**
   *
   * @author admin
   */
  public class UserDetails {
  
      private final StringProperty id;
      private final StringProperty type;
      private final StringProperty kleur;
      private final StringProperty luchthaven;
      private final StringProperty kenmerken;
      private final StringProperty status;
      private final StringProperty datum;
  
      //Default constructor
      public UserDetails(String id, String type, String kleur, String luchthaven, String kenmerken, String status, String datum) {
          this.id = new SimpleStringProperty(id);
          this.type = new SimpleStringProperty(type);
          this.kleur = new SimpleStringProperty(kleur);
          this.luchthaven = new SimpleStringProperty(luchthaven);
          this.kenmerken = new SimpleStringProperty(kenmerken);
          this.status = new SimpleStringProperty(status);
          this.datum = new SimpleStringProperty(datum);
  
      }
  
      //getters
      public String getId() {
          return id.get();
      }
  
      public String getType() {
          return type.get();
      }
  
      public String getKleur() {
          return kleur.get();
      }
  
      public String getLuchthaven() {
          return luchthaven.get();
      }
  
      public String getKenmerken() {
          return kenmerken.get();
      }
  
      public String getStatus() {
          return status.get();
      }
  
      public String getDatum() {
          return datum.get();
      }
  
      //setters
      public void setId(String value) {
          id.set(value);
      }
  
      public void setType(String value) {
          type.set(value);
      }
  
      public void setKleur(String value) {
          kleur.set(value);
      }
  
      public void setLuchthaven(String value) {
          luchthaven.set(value);
      }
  
      public void setKenmerken(String value) {
          kenmerken.set(value);
      }
  
      public void setStatus(String value) {
          status.set(value);
      }
  
      public void setDatum(String value) {
          datum.set(value);
      }
  
      //property values
      public StringProperty idProperty() {
          return id;
      }
  
      public StringProperty typeProperty() {
          return type;
      }
  
      public StringProperty kleurProperty() {
          return kleur;
      }
  
      public StringProperty luchthavenProperty() {
          return luchthaven;
      }
  
      public StringProperty kenmerkenProperty() {
          return kenmerken;
      }
  
      public StringProperty statusProperty() {
          return status;
      }
  
      public StringProperty datumProperty() {
          return datum;
      }
  }
  </code></pre>