准备语句executeUpdate不使用update语句

时间:2016-10-21 14:14:42

标签: java postgresql

我使用以下代码使用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;
}

它不会影响数据库。为什么会这样?我的连接处于自动提交模式,但仍然没有更新。我怎样才能解决这个问题?

3 个答案:

答案 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);

这会对你有所帮助。