在 Eclipse 中使用 UPDATE - SET - WHERE 方法更新 MySQL 数据库时出错

Posted

技术标签:

【中文标题】在 Eclipse 中使用 UPDATE - SET - WHERE 方法更新 MySQL 数据库时出错【英文标题】:Error when updating MySQL database using UPDATE - SET - WHERE method in Eclipse 【发布时间】:2021-10-30 18:10:38 【问题描述】:

我正在使用 Eclipse 制作一个程序,该程序允许用户在每次补货/使用时更新化学品的数量,这要求他们输入化学品的 ID 以及他们想要添加/减去的数量。然后执行查询以在数据库中搜索化学品的 ID,并相应更新其数量。

但是,我在更新音量时遇到了困难。我尝试将 mysql 的 UPDATE 语句从this website 调整为 SET volume = volume + amount added, WHERE Chemical ID = ID by the user;但是,我的代码中似乎存在一些语法错误,更具体地说是在 UPDATE - SET - WHERE 行:

public void IDEnter() 
    try 
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8889/StockControlSystem","root","root");
        Statement stmt = con.createStatement();
        String sql = "Select * from Chemicals where `Chemical ID` ='" + txtChemical_ID.getText()+"'";
        ResultSet rs = stmt.executeQuery(sql);
        if(rs.next()) 
            stmt.executeUpdate("UPDATE Chemicals" + "SET `Volume` = rs.getInt(Volume) + Integer.parseInt(AmountAdded.getText()) WHERE `Chemical ID` in (txtChemical_ID.getText())");
        
        else 
            JOptionPane.showMessageDialog(null, "Invalid chemical ID");
            txtChemical_ID.setText(null);
        
     catch(Exception exc) 
        exc.printStackTrace();
    

由于我还是 MySQL 的新手,有人可以帮我纠正这个问题吗?非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

我认为您的问题可能与“rs.getInt(Volume)”有关

你的:

    "UPDATE Chemicals" + "SET `Volume` = rs.getInt(Volume)
+ Integer.parseInt(AmountAdded.getText()) 
WHERE `Chemical ID` in (txtChemical_ID.getText())"

你能试试这个吗:

 "UPDATE Chemicals" + "SET `Volume` = " + 
Integer.parseInt(AmountAdded.getText()) + " 
WHERE `Chemical ID` in (" + (txtChemical_ID.getText()) +")"

【讨论】:

【参考方案2】:

您的整个查询格式错误。将您的代码更改为:

stmt.executeUpdate("UPDATE Chemicals SET Volume = " +
 rs.getInt(Volume) + Integer.parseInt(AmountAdded.getText())
 + " WHERE Chemical_ID in (" + txtChemical_ID.getText() +  ")");

在查询中定义列名时不能使用' 单引号。单引号用于字符串值!

不过,这不是最好的方法。使用PreparedStatement

这边:

String updateString = "UPDATE Chemicals SET Volume = ? WHERE Chemical_ID in (?)"; // Creation of the prepared statement, the ? are used as placeholders for the values
PreparedStatement preparedStatement = con.prepareStatement(updateString);
preparedStatement.setInt(1, rs.getInt(Volume) + Integer.parseInt(AmountAdded.getText())); // Setting the first value
preparedStatement.setString(2, txtChemical_ID.getText()); // Setting the second. I am supposing that this txtChemical_ID textField has values seperated by commas, else this will not work!
preparedStatement.executeUpdate();

如果您需要阅读更多关于PreparedStatement 的信息,那么这里有很多很棒的resources。它们还可以防止 SQL 注入。

【讨论】:

以上是关于在 Eclipse 中使用 UPDATE - SET - WHERE 方法更新 MySQL 数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章

Java SE基础教程——Eclipse开发工具的安装与使用

如何卸载java(TM) SE Development Kit 6 Update 43

eclipse中项目maven update无法停止解决方法

eclipse中的jrebel怎么用

eclipse中Java(TM) Platform SE binary已停止工作怎么解决

java1234教程系列笔记 S1 Java SE 02 eclipse初步使用注释标识符