使用Java将数据从一种形式传输到另一种形式

时间:2013-11-19 22:18:15

标签: java mysql forms

有两种形式只链接到数据库中的一个表。一个表单将数据插入表中,另一个表单检索它。我通过一种形式编写了编码,但它不起作用。这是第一种形式的代码片段(fashion_and_footwear):

    int dress1=100;
double price1=Double.parseDouble(Price1.getText());
DefaultTableModel CurrentPurchases= new DefaultTableModel();
int rows=CurrentPurchases.getRowCount();
if (rows>0){
    for (int i = 0; i < rows; i++) {
    CurrentPurchases.removeRow(0); }
}
try{
    Connection connection=getConnection();
    stmt=connection.createStatement();
    String Buy1Query1="Update Products set Quantity=Quantity-1 where Product_no=1;";
    String Buy1Query2="Insert into Buy values('"+Pname1.getText()+"',"+price1+");";
    stmt.executeUpdate(Buy1Query1);
    stmt.executeUpdate(Buy1Query2);
    dress1--;
    if(dress1==0){
        JOptionPane.showMessageDialog(null,"Sorry, This Item is Out of Stock!");
    }
    new ShoppingCart().setVisible(true);
    String Pname="";
    double Price;
    PreparedStatement buyquery=connection.prepareStatement("Select * from Buy;");
    rs=buyquery.executeQuery();
    if(rs.next()){
    Pname=rs.getString("ProductName");
    Price=rs.getDouble("Price");
    CurrentPurchases.addRow(new Object[]{Pname,Price});
    }
}
catch(SQLException ex){
    ex.printStackTrace();
    ex.getErrorCode();
}
finally{}

这是我创建的表格:

create table Buy(ProductName varchar(100),Price decimal(7,2));

数据被插入到后端表中,但不会传输到其他表单(ShoppingCart)。我该怎么办? 注意:ShoppingCart表单中已有一个名为CurrentPurchases的表组件。

1 个答案:

答案 0 :(得分:0)

如评论中所述,问题是插入后选择的数据不是最后插入的行。所以,有两种可能的解决方案。

第一个也是最好的一个是将自动增量列添加到Buy作为主键。您可以使用类似于:

的SQL语句
ALTER TABLE Buy ADD COLUMN id integer primary key not null auto_increment;

然后,在插入此表后(您不需要更改INSERT语句),您必须获取最后生成的密钥:

stmt.executeUpdate(Buy1Query2);
ResultSet rsKey = stmt.getGeneratedKeys();
rsKey.next();
int lastInsertId = rsKey.getInt(1);

然后,您必须更改SELECT声明:         PreparedStatement buyquery = connection.prepareStatement(“Select * from Buy where id =”+ lastInsertId);

就是这样。

另一个选项是,只要productname表中Buy中的重复值不能使用以下SELECT语句:

    PreparedStatement buyquery=connection.prepareStatement(
                     "Select * from Buy where productname = '"+
                                            Pname1.getText()+"'");

但我宁愿第一个选择。