检查行是不是已存在如果不存在则插入行否则显示消息

Posted

技术标签:

【中文标题】检查行是不是已存在如果不存在则插入行否则显示消息【英文标题】:check if row already exists if does not exist insert row otherwise show message检查行是否已存在如果不存在则插入行否则显示消息 【发布时间】:2017-03-29 04:46:00 【问题描述】:
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 也总是返回一些值。如何解决这个问题。

【问题讨论】:

mysql 和 sql-server 是两个不同的 rdbms。请标记正确的。 【参考方案1】:

有一个更简单的解决方案可能对您有用:

    丢弃第一个检查条目是否已存在的查询

    改写sql2如下:

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

    地址:pst.setString(7, productCodeTextField.getText());

    executeUpdate() 返回一个int,指示受查询影响的行数。使用此变量来确定是否添加了行。如果变量 != 0 则显示成功消息。

【讨论】:

在添加关键字“ignore”时,错误消息显示关键字“into”附近的语法不正确 @MohitJoshi 请粘贴您输入的导致错误的完整字符串。 将忽略值插入库存(productCode、productName、quantity、price、companyName、categoryName)值(?,?,?,?,?,?) @MohitJoshi 您最初将此问题标记为 mysql。该 SQL 语句将在 mysql 中有效,但在 SQL Server 中无效。我将为 SQL Server 写另一个答案【参考方案2】:
INSERT INTO stock 
(productCode, productName, quantity, price, companyName, categoryName) 
select ?,?,?,?,?,?
WHERE NOT EXISTS 
    (SELECT * FROM stock WHERE productCode = ?)

这就是它在 SQL Server 上的工作方式。 3分和4分和Coop回答的一样

【讨论】:

以上是关于检查行是不是已存在如果不存在则插入行否则显示消息的主要内容,如果未能解决你的问题,请参考以下文章

Mysql,检查行是不是存在,如果它确实获取值,如果不插入

如果存在则增加行上的字段,否则插入新行

PHP MySQL:如果API数据中不存在则删除行

如果存在则更新行否则使用实体框架插入逻辑[关闭]

如果存在,我需要更新,否则使用 Linq 插入 SQL

检查文件是不是存在然后追加记录