Проверить, если строка уже существует, если не существует, вставить строку в противном случае показать сообщение

String sql2="if not exists(select * FROM stock where productCode=?)\n" +
                    "Begin\n" +
                    "insert into stock "
                  + "(productName,quantity,currentQuantity,price,companyName,categoryName,productCode) "
                  + "values(?,?,?,?,?,?,?)\n" +
                    "End";
            PreparedStatement pst2 = con.prepareStatement(sql2);
            pst2.setString(1,productCodeTextField.getText());
            pst2.setString(2,productNameTextField.getText());
            pst2.setString(3,quantityTextField.getText());
            pst2.setString(4,quantityTextField.getText());
            pst2.setString(5,priceTextField.getText());
            pst2.setString(6, (String) companyNameJComboBox.getSelectedItem());
            pst2.setString(7, (String) categoryNameJComboBox.getSelectedItem());
            pst2.setString(8,productCodeTextField.getText());
            int x=pst2.executeUpdate();
            if(x!=0){
                productCodeTextField.setText("");
                productNameTextField.setText("");
                quantityTextField.setText("");
                priceTextField.setText("");
                JOptionPane.showMessageDialog(null,"Product entered");    
            }else{
                JOptionPane.showMessageDialog(null,"Product already exists");
            }  

Я успешно могу проверить наличие уже существующих продуктов перед вставкой, но не могу заполнить правильное сообщение на основе выполненного запроса. ExecuteUpdate всегда возвращает некоторое значение, даже если вставка не выполняется. Как это исправить.

1 ответ

Существует более простое решение, которое может работать на вас:

  1. Выбросьте первый запрос, который проверяет, существует ли уже запись

  2. Перепишите sql2 следующим образом:

    INSERT INTO stock 
    (productCode, productName, quantity, price, companyName, categoryName) 
    VALUES (?,?,?,?,?,?)
    WHERE NOT EXISTS 
        (SELECT * FROM stock WHERE productCode = ?)
    
  3. Добавлять: pst.setString(7, productCodeTextField.getText());

  4. executeUpdate() возвращает int с указанием количества строк, затронутых запросом. Используйте эту переменную, чтобы определить, была ли добавлена ​​строка. Если переменная!= 0, отобразите сообщение об успешном завершении.

INSERT INTO stock 
(productCode, productName, quantity, price, companyName, categoryName) 
select ?,?,?,?,?,?
WHERE NOT EXISTS 
    (SELECT * FROM stock WHERE productCode = ?)

Вот как это работает для SQL Server. 3 и 4 балла такие же, как ответил Куп

Другие вопросы по тегам