我在JScrollPane中有一个JTable,数据来自数据库。单元格是可编辑的,我想将新值(已编辑的值)保存在数据库中。问题是 getValueAt(row,col)返回旧的未编辑的值。
以下是从单元格中获取值并将其插入数据库的代码。
DefaultTableModel tableModel = (DefaultTableModel) table.getModel(); int row = table.getEditingRow(); if(row == -1) return -1; String name = tableModel.getValueAt(row, 0).toString(); String stringPrice = tableModel.getValueAt(row, 1).toString(); float price = Float.parseFloat(stringPrice); products.updateProduct(name, price); ... return 1;
以下是 updateProduct(名称,价格)方法中的内容:
UPDATE products SET `prod_name` = 'OLD_NAME', `prod_price` = 'OLD_PRICE' WHERE `id` = 4
而不是:
UPDATE products SET `prod_name` = 'NEW_NAME', `prod_price` = 'NEW_PRICE' WHERE `id` = 4
可能有一个简单的解决方案,但我无法弄清楚。任何帮助表示赞赏。
答案 0 :(得分:1)
如果不确切知道你的代码是如何被调用的,我猜你的问题是单元格编辑器还没有被停止,所以模型还没有用新数据更新。
当单元格中的数据发生更改时,您可以使用TableModelListener进行通知。然后保证模型中的数据是正确的。
或者,如果您使用“保存”按钮更新数据库,则需要阅读Table Stop Editing以解决问题。
答案 1 :(得分:-1)
您可以实现自己的单元格编辑器,并使用其当前值而不是模型中的值(如果它处于活动状态)