我试图从数据库中减去输入文本字段的数字,但不知道如何做到这一点

时间:2016-08-09 10:24:28

标签: java sql database subtraction

我有一个库存系统,您可以在其中添加项目到系统,增加不同项目的数量,减少系统中不同项目的数量,并从系统中完全删除项目。

我想要做的是当用户输入第一个文本框中的项目名称和第二个文本框中的数字时,当他们按下删除时,他们输入到第二个文本框中的数字将从numberinstock变量中删除数据库。

以下是我删除按钮的代码:

 private void RemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             

    String url = "jdbc:derby://localhost:1527/Customers";
    String username = "username";
    String password = "password";

    try {
        Connection conn = DriverManager.getConnection(url, username, password);
        if (conn != null) {
            System.out.println("Connected");

            String sql = "UPDATE STOCK\n"
            + "SET NUMBERINSTOCK = NUMBERINSTOCK -"+RemoveTextField1.getText()+" \n"
            + "WHERE UPPER(name)=?";

            PreparedStatement statement = conn.prepareStatement(sql);

            statement.setString(1, RemoveTextField1.getText());
            statement.setString(2, RemoveAnItemTextField.getText().toUpperCase());

            int rowsUpdated = statement.executeUpdate();

            if (rowsUpdated > 0)
            {
                JOptionPane.showMessageDialog(null,"That item has been updated successfully");
            }
            else
            {
                JOptionPane.showMessageDialog(null,"That item is either not in the database or you have entered the wrong information");
            }
        }
    }catch (SQLException ex)
    {
        JOptionPane.showMessageDialog(null,ex.getMessage());
    }
      ResultSet rs = null;
         PreparedStatement ps = null;
      try{
       Connection conn = DriverManager.getConnection(url, username, password);
       ps = conn.prepareStatement("select * from Stock");
       rs = ps.executeQuery();

       SearchTable.setModel(DbUtils.resultSetToTableModel(rs));
    }catch(Exception ex){
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
}                                            

这段代码的作用是它连接到数据库,然后有一个更新语句,一旦按下删除按钮就会更新数据库,我这样当用户输入一个项目的名称时,它将从该数据库中的该项目,但我意识到有人可能希望一次删除多个项目。 这就是我被困住的地方,我不知道如何在按下删除按钮后获取用户在第二个文本框中输入的数字以便从数据库中删除

1 个答案:

答案 0 :(得分:1)

你的代码有很多很多问题。

首先,这是您编写PreparedStatement的方式:

    String sql = "UPDATE STOCK\n"
            + "SET NUMBERINSTOCK = NUMBERINSTOCK - ? \n"
            + "WHERE UPPER(name) = ?";

    PreparedStatement statement = conn.prepareStatement(sql);
    int count = Integer.valueOf(RemoveTextField1.getText());
    statement.setInt(1, count);
    statement.setString(2, RemoveAnItemTextField.getText().toUpperCase());

我没有对RemoveTextField1进行任何错误检查,我假设它持有项目计数。您需要检查字段中是否输入了整数。

其次,Java中的变量名以小写字母开头。方法名称以小写字母开头。类名以大写字母开头。 JTextField名称应为removeItemCountTextField。这是一个更具描述性的名称,这使得阅读代码和调试更容易。

第三,将您的代码和您的疑虑分开。您应该具有仅处理GUI的GUI代码,包含来自数据库和GUI的信息的模型代码,以及除了将数据从模型传输到数据库以及将数据库传输到模型之外什么都不做的数据库代码。您在代码中有多少个不同的位置连接到数据库并从数据库断开连接?答案应该是一个