更新到MySQL返回1,没有错误/异常,但实际上没有更新

时间:2015-08-20 09:26:20

标签: java mysql sql sql-update mysql-workbench

以下方法应该使用传递给它的公司信息更新MySql DB。

我有其他方法可以插入和删除并且工作正常,但是此方法无异常运行,并且始终返回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);
    }

1 个答案:

答案 0 :(得分:0)

在执行conn.commit()后,您从未致电executeUpdate()。 Java代码返回1的原因是因为它成功了,但数据库在事务结束后立即回滚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让我想到你的问题。