【问题标题】: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。请标记正确的。

标签: java sql-server jdbc exists


【解决方案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 则显示成功消息。

【讨论】:

  • 在添加关键字“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回答的一样

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多