【问题标题】:Java SQL update statement is not updating in the table in spite of not getting errors尽管没有出现错误,但 Java SQL 更新语句未在表中更新
【发布时间】:2019-01-19 11:48:29
【问题描述】:
public void updateFields(BorrowedBook borrowedBook) throws SQLException {
    Integer copiesInBorrow = new Integer(0);
    Integer availableCopies = new Integer(0);
    PreparedStatement pstmt;
    try {
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM library_students.book WHERE BookID=" + "'" + getBookID(borrowedBook)+ "'");
        if((rs.next())){
            copiesInBorrow=rs.getInt(11);
            availableCopies=rs.getInt(13);
        }
        pstmt = con.prepareStatement("UPDATE library_students.book SET CopiesInBorrow= ? AND AvailableCopies=? WHERE BookID=?");
        pstmt.setInt(1,++copiesInBorrow);
        pstmt.setInt(2,--availableCopies);
        pstmt.setString(3,getBookID(borrowedBook));
        pstmt.executeUpdate();
        rs.close();
        }catch (SQLException ex) {
            ex.printStackTrace();
        }
}

我没有收到任何错误,并且 executeUpdate();也回来了 1 有什么问题?

【问题讨论】:

  • 请不要选择不相关的标签。 C语言与您的问题完全无关。我也看不到workbench 标签的相关性。因此我删除了它们。

标签: java mysql sql jdbc


【解决方案1】:

你有语法错误,改成:

UPDATE library_students.book SET CopiesInBorrow= ?, AvailableCopies=? WHERE BookID=?

不要在要更新的列之间使用AND。您可以在WHERE 部分中使用AND 来应用您想要的条件。

如果你想要这样的东西:

UPDATE library_students.book SET CopiesInBorrow= ? WHERE AvailableCopies=? AND BookID=?

那么使用AND 将是有效的。

从您的代码中,我看到您只想增加一列的值并减少另一列的值。您无需先在表中找到这些值,然后再进行更改。

你可以执行这个语句:

UPDATE library_students.book SET CopiesInBorrow = CopiesInBorrow + 1, AvailableCopies = AvailableCopies - 1 WHERE BookID = ?

所以改成这样:

public void updateFields(BorrowedBook borrowedBook) throws SQLException {
    PreparedStatement pstmt;
    try {
        Statement stmt = con.createStatement();
        pstmt = con.prepareStatement("UPDATE library_students.book SET CopiesInBorrow = CopiesInBorrow + 1, AvailableCopies = AvailableCopies - 1 WHERE BookID = ?");
        pstmt.setString(1, getBookID(borrowedBook));
        pstmt.executeUpdate();
        rs.close();
    }catch (SQLException ex) {
        ex.printStackTrace();
    }
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多