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