更新到 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 让我想到了你的问题。
下面的方法应该使用传递给它的公司信息更新 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 让我想到了你的问题。