изменить пароль из базы данных в соответствии с разными идентификаторами начала - PullRequest
1 голос
/ 04 апреля 2019

У меня есть 3 таблицы (врач, медсестра, пациент), все они имеют разные идентификаторы начала, врачи идентифицируются с 101, медсестра - с 102, а пациент - с 200. и я хочу изменить пароль в соответствии с их идентификатором. в моем JFrame у меня есть 5 JComponents, 4 Jtextfields, 1 Jbutton 1 Jtextfields для идентификатора (имя: idField) 1 Jtextfields для текущего пароля (имя: currentPass) 2 поля Jtext для нового пароля (имя: newPass1, newPass2) 1 кнопка для действия (имя: кнопка изменения)

Я сделал 2 разных способа в своем коде, но оба не работали со мной. Вы можете помочь мне с этой проблемой?

первый путь:

private void changeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
       id=idField.getText();
       newpass1=newPass1.getText();
       newpass2=newPass2.getText();

        try {
        con = DriverManager.getConnection("jdbc:derby://localhost:1527/hj", "xxx", "xxx");
        st = con.createStatement();

        if (newpass1.equals(newpass2)){


          ResultSet rs = st.executeQuery("update patient set patient_Password="+ newpass1 +" where patient_Id="+id+" and patient_Id like '200%'");  
          JOptionPane.showMessageDialog(this , "Successfully changed", "Patient password successfuly changed !",JOptionPane.PLAIN_MESSAGE);

          ResultSet rs1 = st.executeQuery("update Nurse set nurse_password="+ newpass1 +" where nurse_id="+id+" and nurse_id like '102%'");
            JOptionPane.showMessageDialog(this , "Successfully changed", "Nurse password successfuly changed !",JOptionPane.PLAIN_MESSAGE);

            ResultSet rs2 = st.executeQuery("update doctor set doctor_password="+ newpass1 +" where doctor_id="+id+" and doctor_id like '101%'");
            JOptionPane.showMessageDialog(this , "Successfully changed", "Doctor password successfuly changed !",JOptionPane.PLAIN_MESSAGE);

        } else 
            JOptionPane.showMessageDialog(this , "Not equal", "Your new passwords are not equal!! , try again",JOptionPane.ERROR_MESSAGE );
       }catch (Exception x){
           JOptionPane.showMessageDialog(this, x.getStackTrace());
       }
    }

второй способ:

 private void changeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
       id=idField.getText();
       newpass1=newPass1.getText();
       newpass2=newPass2.getText();

        try {
        con = DriverManager.getConnection("jdbc:derby://localhost:1527/hj", "xxx", "xxx");
        st = con.createStatement();

        if (newpass1.equals(newpass2)){

        if (id.startsWith("200")){
          ResultSet rs = st.executeQuery("update patient set patient_Password="+ newpass1 +" where patient_Id="+id+"");  
          JOptionPane.showMessageDialog(this , "Successfully changed", "Patient password successfuly changed !",JOptionPane.PLAIN_MESSAGE);
        } 
        else if (id.startsWith("102")){
          ResultSet rs = st.executeQuery("update Nurse set nurse_password="+ newpass1 +" where nurse_id="+id+"");
            JOptionPane.showMessageDialog(this , "Successfully changed", "Nurse password successfuly changed !",JOptionPane.PLAIN_MESSAGE);
                }
        else if (id.startsWith("101")){
            ResultSet rs = st.executeQuery("update doctor set doctor_password="+ newpass1 +" where doctor_id="+id+"");
            JOptionPane.showMessageDialog(this , "Successfully changed", "Doctor password successfuly changed !",JOptionPane.PLAIN_MESSAGE);
        }

        } else 
            JOptionPane.showMessageDialog(this , "Not equal", "Your new passwords are not equal!! , try again",JOptionPane.ERROR_MESSAGE );
       }catch (Exception x){
           JOptionPane.showMessageDialog(this, x.getStackTrace());
       }
    }

1 Ответ

2 голосов
/ 04 апреля 2019

Использовать PreparedStatement!

    if (id.startsWith("200")){
      try (PreparedStatement pstmt = conn.prepareStatement("UPDATE patient SET patient_passwort=? WHERE patient_id=?");) {
          pstmt.setString(1, newpass1);
          pstmt.setString(2, id);
          int rows = pstmt.executeUpdate();

          JOptionPane.showMessageDialog(this , "Successfully changed", 
             "Patient password successfuly changed! (updated rows: "+rows+")", JOptionPane.PLAIN_MESSAGE);
       }
    } 

Сцепив запрос, вы получите update patient set patient_Password=abcdefghi where patient_Id=200340 and patient_Id like '200%'. Новый пароль (здесь abcdefghi) не заключен в кавычки, что является обязательным для строк в запросах. patient_id также не заключено в кавычки, но, возможно, это числовое поле, которое не нужно заключать в кавычки.

Кстати:

  • часть запроса patient_id like '200%' не требуется.

  • Вы должны закрыть все экземпляры PreparedStatement / Statement, что можно сделать с помощью try-with-resources (try (PreparedStatement xxx = ...) { ... your code } // closes automatically). То же самое касается Connection и ResultSet.

  • , поскольку id является целым числом, вы можете использовать его следующим образом: int updId = Integer.parseInt(id); ... pstmt.setInt(2, updId); ...

Типпы: Вы еще больше упростите свою жизнь, если будете использовать Apache commons-dbutils. например org.apache.commons.dbutils.QueryRunner

  QueryRunner r = new QueryRunner();
  int rows = r.update(conn, 
       "UPDATE patient SET patient_passwort=? WHERE patient_id=?",
       newpass1, id);
...