Как увеличить количество только в базе данных, если товар уже внесен в базу данных?

#java #sql #swing #jdbc

#java #sql #качать #jdbc

Вопрос:

Я создал систему заказа еды, в которой есть 5 разных JFrames, имеющих свои собственные категории, такие как еда, фаст-фуд, закуски, напитки. Каждая категория имеет всплывающие окна для каждого продукта, который является еще одним JFrame. Именно здесь, когда клиент выберет необходимое блюдо, оно будет добавлено в базу данных.

Я создал запрос к базе данных, в котором при выборе различных блюд из всплывающего меню эти элементы будут внесены в базу данных. Это работает отлично.

Однако я хочу обновить только количество, если описание продукта существует. Например, если сырный бургер доступен в базе данных, я хочу только увеличить количество. Как я могу это сделать?

 
    public void  InsertOrderDetails(){
         String Insert;
         String Update;
         int i = Integer.parseInt(DBqty);
         BigDecimal Totals=new BigDecimal(DBtotalPrice);
         BigDecimal TotalValue=new BigDecimal(Total);
            try
            {    
             //Opening database for connection
            conn = DriverManager.getConnection(connectionUrl, username, Pass);
            Statement st=conn.createStatement();
            String sql="SELECT * FROM SALESORDER WHERE ProductDescription ='"   ProductDescription  "'";
            ResultSet rs=st.executeQuery(sql);
            if(rs.next()){
            int quan =i  qty;
            BigDecimal totaly = Totals.add(TotalValue);
             Update="UPDATE SALESORDER SET Quantity=? ,TotalPrice=? WHERE ProductDescription ='"   ProductDescription  "'";
             PreparedStatement pstmt = conn.prepareStatement(Update);
             pstmt.setInt(1, quan);
             pstmt.setBigDecimal(2, totaly);
             pstmt.executeUpdate();
             pstmt.close();
             JOptionPane.showMessageDialog(null,"Sucessfully Added to plate");
            }
            
           else{   
            
             Insert="INSERT INTO SalesOrder (CustID,ProductDescription,Quantity,TotalPrice) VALUES (?,?,?,?)";
             PreparedStatement pstmt = conn.prepareStatement(Insert);
             pstmt.setInt(1,CustID);
             pstmt.setString(2, ProductDescription);
             pstmt.setInt(3, qty);
             pstmt.setBigDecimal(4, TotalValue);
             pstmt.executeUpdate();
             pstmt.close();
             JOptionPane.showMessageDialog(null,"Sucessfully Added to plate");
            }
            }
            catch(SQLException e){
                   JOptionPane.showMessageDialog(null,"Something went wrongn");
                 e.printStackTrace();
      
        }
            finally{
                try {
                    
                    conn.close();
                } catch (SQLException ex) {
                    Logger.getLogger(POPUP_Message_FriedRice.class.getName()).log(Level.SEVERE, null, ex);
                }} 
       }
 

Комментарии:

1. statement.executeUpdate возвращает int результат as, который представляет собой количество затронутых строк. Вы можете использовать его, чтобы узнать, обновлена ли какая-либо запись или нет.

2. Кстати, если вы используете PreparedStatement не объединять описание продукта, используйте параметр ? for и свяжите его, таким образом, вы должны опустить одинарные кавычки. Таким образом, запрос будет: update SALESORDER set Quantity = ?, TotalPrice = ? where ProductDescription = ?

3. Кроме того, вы можете сделать что-то вроде update SALESORDER set Quantity = Quantity ?, TotalPrice = TotalPrice ? where ProductDescription = ? , так что вы просто увеличиваете числа, и вам не нужно извлекать его перед его увеличением.

4. Итак, я делаю это ответом, и вы принимаете его.

Ответ №1:

Statement.executeUpdate возвращает int число затронутых строк, вы можете понять, существовали записи или нет, используя это поле.

Итак, ваш код становится чем-то вроде:

 public static final String UPDATE_QUERY = "UPDATE SALESORDER SET Quantity = Quantity   ?, TotalPrice = TotalPrice   ? WHERE ProductDescription = ? and CustId = ?";
public static final String INSERT_STATEMENT = "INSERT INTO SalesOrder (CustID,ProductDescription,Quantity,TotalPrice) VALUES (?,?,?,?)";

public void InsertOrderDetails() {
    try (Connection connection = DriverManager.getConnection(connectionUrl, username, password)) {
        //Opening database for connection
        int affectedRows;
        try (PreparedStatement updateStatement = connection.prepareStatement(UPDATE_QUERY)) {
            updateStatement.setInt(1, quantity);
            updateStatement.setBigDecimal(2, itemPrice);
            updateStatement.setString(3, productDescription);
            updateStatement.setInt(4, customerId);

            affectedRows = updateStatement.executeUpdate();
        }

        if (affectedRows > 0) {
            JOptionPane.showMessageDialog(null, "Sucessfully Added to plate");
        } else {
            try (PreparedStatement insertStatement = connection.prepareStatement(INSERT_STATEMENT)) {
                insertStatement.setInt(1, customerId);
                insertStatement.setString(2, productDescription);
                insertStatement.setInt(3, quantity);
                insertStatement.setBigDecimal(4, itemPrice);
                insertStatement.executeUpdate();
            }

            JOptionPane.showMessageDialog(null, "Sucessfully Added to plate");
        }
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null, "Something went wrongn");
        e.printStackTrace();
    }
}
 

Я использую Java 7, попробуйте использовать ресурс здесь, чтобы удалить дублирующийся код.

Комментарии:

1. Спасибо, все работает нормально, это помогло мне уменьшить объем кода ,

Ответ №2:

     public void  InsertOrderDetails(){
     String Insert;
     String Update;
     BigDecimal TotalValue=new BigDecimal(Total);
        try
        {    
         //Opening database for connection
        conn = DriverManager.getConnection(connectionUrl, username, Pass);
        Statement st=conn.createStatement();
        String sql="SELECT * FROM SALESORDER WHERE ProductDescription ='"   ProductDescription  "'";
        ResultSet rs=st.executeQuery(sql);
        if(rs.next()){
         Update="update SALESORDER set Quantity = Quantity   ?, TotalPrice = TotalPrice   ? where ProductDescription = ?";
         PreparedStatement pstmt = conn.prepareStatement(Update);
         pstmt.setInt(1,qty);
         pstmt.setBigDecimal(2,TotalValue);
         pstmt.setString(3,ProductDescription);
         pstmt.executeUpdate();
         pstmt.close();
         JOptionPane.showMessageDialog(null,"Sucessfully Added to plate");
        }
        
       else{   
        
         Insert="INSERT INTO SalesOrder (CustID,ProductDescription,Quantity,TotalPrice) VALUES (?,?,?,?)";
         PreparedStatement pstmt = conn.prepareStatement(Insert);
         pstmt.setInt(1,CustID);
         pstmt.setString(2, ProductDescription);
         pstmt.setInt(3, qty);
         pstmt.setBigDecimal(4, TotalValue);
         pstmt.executeUpdate();
         pstmt.close();
         JOptionPane.showMessageDialog(null,"Sucessfully Added to plate");
        }
        }
        catch(SQLException e){
               JOptionPane.showMessageDialog(null,"Something went wrongn");
             e.printStackTrace();
  
    }
        finally{
            try {
                
                conn.close();
            } catch (SQLException ex) {
                Logger.getLogger(POPUP_Message_FriedRice.class.getName()).log(Level.SEVERE, null, ex);
            }} 
   }