2016-10-21 19 views
0

以下のコードを使用して、postgresの更新クエリを使用してパスワードを変更します。準備されたステートメントexecuteUpdateが更新ステートメントで動作していません

@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; 
} 

データベースには影響しません。どうしてこんなことに?私の接続は自動コミットモードですが、まだ更新されていません。どのようにこれを整理することができますか?

答えて

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

が提供する答えで述べたように

また、それは理由を説明せずに、「あなたはこれを試してみてください」と言って非常に有用ではありませんプリペアドステートメントを使用することが好ましいです。 – Kayaman

+0

おかげで...それは動作します – Learner

+0

あなたの歓迎:-) –

2

クエリにmailパラメータに追加の空白が含まれているため、クエリによって行が返されない可能性があります。

UPDATE users SET password = 'Password' WHERE mail = ' mailadress' 

空白を削除して、データベースに影響するかどうかを確認してください。 Keval Pithva

関連する問題