我使用以下代码使用postgres的更新查询更改密码。
@POST
@Path("/changepassword")
@Consumes(MediaType.APPLICATION_JSON)
public String changePassword(String msg) {
JSONObject jsonObject = new JSONObject(msg);
String songString = null;
String query = null;
PreparedStatement stmt = null;
try {
if (UserManagement.authMail(jsonObject.getString("mail"))) {
songString = Utilities.constructJSON("welcome", true);
Connection connection = MyResource.getConnection();
query = "UPDATE users SET password = '" + jsonObject.getString("password") + "' WHERE mail = ' "
+ jsonObject.getString("mail") + "'";
stmt = connection.prepareStatement(query);
stmt.executeUpdate();
songString = Utilities.constructJSON("Password reset successfull", true);
} else {
songString = Utilities.constructJSON("Please check your mail address", true);
}
} catch (Exception ex) {
songString = Utilities.constructJSON("" + query + ex, true);
}
return songString;
}
它不会影响数据库。为什么会这样?我的连接处于自动提交模式,但仍然没有更新。我怎样才能解决这个问题?
答案 0 :(得分:2)
这可能会对您有所帮助:
Connection connection = MyResource.getConnection();
query = "UPDATE users SET password = ? WHERE mail = ?";
stmt = connection.prepareStatement(query);
stmt.setString(1,jsonObject.getString("password"));
stmt.setString(2,jsonObject.getString("mail"));
stmt.executeUpdate();
另外请确保jsonObject.getString("password")
和jsonObject.getString("mail")
获得一些价值。
答案 1 :(得分:2)
查询在mail参数中包含一个额外的空格,这可能导致查询不返回任何行。
UPDATE users SET password = 'Password' WHERE mail = ' mailadress'
尝试删除空格,看看这是否会影响数据库。
此外,最好使用Keval Pithva
提供的答案中提到的预备陈述答案 2 :(得分:0)
创建连接时,只需创建:
con.setAutoCommit(true);
这会对你有所帮助。