更新到 MySQL returns 1,没有 errors/exception,但实际上没有更新发生

Update to MySQL returns 1, no errors/exception, but no updates actually take place

下面的方法应该使用传递给它的公司信息更新 MySql 数据库。

我有其他方法可以插入和删除并且工作正常,但是这个方法 运行 无一例外,而且总是 returns 1.

general_log 文件显示它收到了更新字符串,但仍然没有任何变化。

我唯一能让它工作的时候是我 运行 直接在 MySql 工作场所中的代码。

如果您需要更多信息来解决这个问题,请告诉我。 我给了你我认为需要的一切。 谢谢。

// SQL update string received from the program in the log file
//  UPDATE couponsprojectdb.company SET Email = 'admin@MyCompany.org', Password = 'pass' WHERE ID = 3


public void updateCompanyById(Company c, long id) throws SQLException 
{
        Connection conn = pool.getConnection(); // Gets an available connection from pool
        // Prepared statement string
        String sql = ("UPDATE company SET Email = ?, Password = ? WHERE ID = ?");
        PreparedStatement p = conn.prepareStatement(sql);
        p.setString(1, c.getEmail());
        p.setString(2, c.getPassword());
        p.setLong(3, id);
        int i = p.executeUpdate();
        System.out.println("changes: " + i);
        pool.releaseConnection(conn);
    }

您在完成 executeUpdate() 之后从未调用过 conn.commit()。 Java代码returns1的原因是因为它成功了,但是数据库在事务结束后立即回滚了UPDATE

您还需要关闭连接。将您的代码更改为:

try {
    Connection conn = pool.getConnection();
    String sql = ("UPDATE company SET Email = ?, Password = ? WHERE ID = ?");
    PreparedStatement p = conn.prepareStatement(sql);
    p.setString(1, c.getEmail());
    p.setString(2, c.getPassword());
    p.setLong(3, id);
    int i = p.executeUpdate();
    conn.commit();      // <-- MAKE SURE TO COMMIT THE TRANSACTION TO THE DATABASE!!!
    System.out.println("changes: " + i);
    pool.releaseConnection(conn);
} catch(Exception e) {
    // handle errors here
} finally {
    try { if (p != null) p.close(); } catch (Exception e) {};
    try { if (conn != null) pool.releaseConnection(conn); } catch (Exception e) {};
}

大帽子提示 this SO post 让我想到了你的问题。