我在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
可能有一个简单的解决方案,但我无法弄清楚 . 任何帮助表示赞赏 .
2 回答
如果不确切地知道你的代码是如何被调用的,我猜你的问题是单元编辑器还没有被停止,所以模型还没有用新数据更新 .
您可以使用TableModelListener在单元格中的数据发生更改时收到通知 . 然后,您可以保证模型中的数据是正确的 .
或者,如果您使用"Save"按钮更新数据库,则需要阅读Table Stop Editing以解决您的问题 .
您可以实现自己的单元格编辑器,并使用其当前值而不是模型中的值(如果它处于活动状态)