我正在开发一个数据库项目。我的jtextfield,addbutton,editbutton和jtable最初是在一个jframe上。但是当我制作一个addbutton来打开另一个jframe并将项目添加到那里时,它可以工作,但它不会更新我的jtable,我的jtable仅在我做了另一个动作之后更新,如编辑或添加另一个项目,应该是什么问题这里?这是我的编辑按钮的示例。顺便说一下,我需要将它插入并更新到我的mysql
if(editID.getText() != null)
{
String UpdateQuery = null;
PreparedStatement ps = null;
Connection con = main.getConnection();
try{
UpdateQuery = "UPDATE mydatabase SET name = ?, price = ?"
+ ", quantity = ? WHERE id = ?";
ps = con.prepareStatement(UpdateQuery);
ps.setString(1, editName.getText());
ps.setString(2, editPrice.getText());
ps.setString(3, editQuantity.getText());
ps.setString(4, editID.getText());
ps.executeUpdate();
main.getProductList();
main.Show_Products_In_JTable();
JOptionPane.showMessageDialog(null, "Product Updated");
}catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}else{
JOptionPane.showMessageDialog(null, "One Or More Fields Are Empty Or Wrong");
}
所以这是我用来编辑表的两个方法......但它似乎不完整,就像我需要一个主要方法来同时刷新我的jtable。我的大脑现在正在爆发这个问题。因为我无法看到任何问题为什么从另一个jframe移动我的编辑方法可能会影响我的程序。
public ArrayList<Database1> getProductList()
{
ArrayList<Database1> productList = new ArrayList<Database1>();
Connection con = getConnection();
String query = "SELECT * FROM mydatabase";
Statement st;
ResultSet rs;
try {
st = con.createStatement();
rs = st.executeQuery(query);
Database1 mydatabase;
while(rs.next())
{
mydatabase = new Database1(rs.getString("id"),rs.getString("name"),rs.getInt("price"),rs.getInt("quantity"));
productList.add(mydatabase);
}
} catch (SQLException ex) {
Logger.getLogger(mainWindow.class.getName()).log(Level.SEVERE, null, ex);
}
return productList;
}
public void Show_Products_In_JTable()
{
ArrayList<Database1> list = getProductList();
DefaultTableModel model = (DefaultTableModel)itemTable.getModel();
model.setRowCount(0);
Object[] row = new Object[4];
for(int i = 0; i < list.size(); i++)
{
row[0] = list.get(i).getId();
row[1] = list.get(i).getName();
row[2] = list.get(i).getQuantity();
row[3] = list.get(i).getPrice();
model.addRow(row);
}
itemTable.setModel(model);
model.fireTableDataChanged();
}