关于JTable单元更改的JAVA更新数据库

关于JTable单元更改的JAVA更新数据库,java,mysql,swing,jtable,updates,Java,Mysql,Swing,Jtable,Updates,他说我对Java一无所知(这不是什么新鲜事),我找不到好的教程。我使用jTable显示一个表,其中填充了MySQL数据库中的数据 到目前为止一切都很好,我拿到了桌子: 您可以单击标准表格单元格,它将更改为文本字段,并且可以用新内容填充。你们都知道,但是我如何使用它来更新数据库中的值呢 我的代码: import [...]; public class table extends JPanel { public String table; private Database db;

他说我对Java一无所知(这不是什么新鲜事),我找不到好的教程。我使用jTable显示一个表,其中填充了MySQL数据库中的数据

到目前为止一切都很好,我拿到了桌子:

您可以单击标准表格单元格,它将更改为文本字段,并且可以用新内容填充。你们都知道,但是我如何使用它来更新数据库中的值呢

我的代码:

import [...];
public class table extends JPanel {
    public String table;
    private Database db;

    public table(String tablename, Database db){

        try {
            table = tablename;
            this.db = db;

            //Get table with and height
            ResultSet res = db.query("SELECT COUNT( * ) FROM `"+table+"`");
            ResultSet res2 = db.query("SELECT COUNT( * ) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '"+table+"'");

            int rows = 0;
            int collums = 0;

            res.next();
            res2.next();

            rows = res.getInt(1);
            collums = res2.getInt(1);

            //Get table column names and set then in array
            ResultSet clom = db.query("DESCRIBE  `"+table+"`");

            String[] columnNames = new String[collums];

            int s = 0;

            while(clom.next()){
                columnNames[s] = clom.getString(1);
                s++;
            }

            //get table data and put in array
            Object[][] data = new Object[rows][collums];

            ResultSet result = db.query("SELECT * FROM `"+table+"`");

            int q = 0;

            while(result.next()){
                for(int a=0; a<= (collums - 1); a++){
                    data[q][a] = result.getString(a + 1);
                    //System.out.println(q + " - " + a);
                }
                q++;
            }

            //Make Jtable of the db result form the two array's
            final JTable table = new JTable(data, columnNames);
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));
            table.setFillsViewportHeight(true);

            // do some event listening for cell change

            JScrollPane scrollPane = new JScrollPane(table);
            JFrame frame = new JFrame("table editor");
            scrollPane.setOpaque(true);
            frame.setContentPane(scrollPane);
            frame.pack();
            frame.setSize(600, 800);
            frame.setVisible(true);
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
}

研究发现,一个删除的答案抄袭了14年前Rachel Swailes的答案。为完整起见,由于答案正确且有用,我在此引用了相关文本:

步骤1:如果您现在就让您的表扩展一个TableModel(如果您还没有扩展的话),那么整个过程将变得更加容易。所以,如果你需要帮助,尽管问

步骤2:在表格模型中,需要启用单元格可编辑。在您创建的TableModel类中,您需要添加以下方法

步骤3:您将在第二个方法中看到,我们启动了一个名为fireTableCellUpdated的方法。所以在这里,我们可以看到它的用途发生了变化。您需要向表中添加一个TableModelListener来捕获此信息

在您决定实现TableModelListener的类中,您需要

现在你有了单元格中的数据和网格中

单元格是这样,您可以根据需要使用数据

table.bindCellEventListner(callback(t){
     Array row = t.getAllValuesAsArrayOfRow();

     String data = "";

     int f = 0
     while(row.next()){
         data .= "`"+clom[f]+"` = '"+row[f]+"',"
         f++;
     }
     data.delLastChar();
     db.query("UPDATE `"+table+"` SET "+data+" WHERE `id` ="+row[0]+";");

});
public boolean isCellEditable(int row, int col) { 
  return true; 
}

public void setValueAt(Object value, int row, int col) {
  rowData[row][col] = value;
  fireTableCellUpdated(row, col);
}
mytable.getModel().addTableModelListener(yourClass);
public void tableChanged(TableModelEvent e) {
  int row = e.getFirstRow();
  int column = e.getColumn();
  TableModel model = (TableModel)e.getSource();
  Object data = model.getValueAt(row, column);
  ...
}