2016-08-11 3 views
0
public class UpdateEmployee extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     PrintWriter out= response.getWriter(); 
     EmployeeDetails emp = new EmployeeDetails(); 
     SessionFactory fact=new Configuration().configure().buildSessionFactory(); 
     Session ses = fact.openSession(); 
     int emp_id = Integer.parseInt(request.getParameter("emp_id")); 
     int new_emp_id = Integer.parseInt(request.getParameter("new_emp_id")); 
     String emp_name = request.getParameter("name"); 
     String emp_designation_id = request.getParameter("designationid"); 
     String emp_skills = request.getParameter("skills"); 
     String emp_department_id = request.getParameter("departmentid"); 
     String emp_notes = request.getParameter("notes"); 
     String emp_email = request.getParameter("email"); 
     String emp_phone = request.getParameter("phone"); 
     String emp_username = request.getParameter("username"); 
     String emp_password = request.getParameter("password"); 
     emp.setEmp_department_id(emp_department_id); 
     emp.setEmp_designation_id(emp_designation_id); 
     emp.setEmp_email(emp_email); 
     emp.setEmp_id(new_emp_id); 
     emp.setEmp_join_date(null); 
     emp.setEmp_name(emp_name); 
     emp.setEmp_notes(emp_notes); 
     emp.setEmp_password(emp_password); 
     emp.setEmp_phone(emp_phone); 
     emp.setEmp_skills(emp_skills); 
     emp.setEmp_username(emp_username); 
     Query query = ses.createQuery("update EmployeeDetails emp set emp_id=:new_emp_id,emp_name=:emp_name,emp_designation_id=:emp_designation_id,emp_skills=:emp_skills,emp_department_id=:emp_department_id,emp_notes=:emp_notes,emp_email=:emp_email,emp_phone=:emp_phone,emp_username=:emp_username,emp_password=:emp_password where emp_id=:emp_id"); 
     query.setParameter(emp_id, emp_id); 
     query.setParameter(new_emp_id, new_emp_id); 
     query.setParameter(emp_name, emp_name); 
     query.setParameter(emp_designation_id, emp_designation_id); 
     query.setParameter(emp_skills, emp_skills); 
     query.setParameter(emp_department_id, emp_department_id); 
     query.setParameter(emp_notes, emp_notes); 
     query.setParameter(emp_email, emp_email); 
     query.setParameter(emp_username, emp_username); 
     query.setParameter(emp_password, emp_password); 
     int result = query.executeUpdate(); 
     out.print(result); 
    } 

} 

Мой результат, когда я пытаюсь обновить:Не удалось обновить строку в MySQL, используя спящий режим

java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based! 
    org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:55) 
    org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:61) 
    org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:382) 
    org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:362) 
    com.unisys.servlets.UpdateEmployee.doPost(UpdateEmployee.java:59) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

Я новичок в спящий режим. Я просмотрел множество ссылок, любые рекомендации относительно обновления будут очень оценены. Я пытаюсь обновить одно значение в строке с использованием значения emp_id и обновить все остальные столбцы в базе данных.

+0

Это может быть вызвано параметрами, которые не заданы в том порядке, в котором они отображаются в вашем запросе. Вы можете добавить параметр к параметру setParameter, чтобы указать позицию. Например: setParameter (1, new_emp_id, new_emp_id); Помните, что позиция начинается с 1 не 0. –

+0

Удалите двоеточие между этим оператором в заявлении об обновлении .... emp_id =: new_emp_id –

ответ

1

Да, вы правы. Но здесь парень смешивается с параметрами «Именованные» с помощью индексированных понятий параметров.

query.setParameter("emp_id", emp_id); 
    query.setParameter("new_emp_id", new_emp_id); 
    query.setParameter("emp_name", emp_name); 
    query.setParameter("emp_designation_id", emp_designation_id); 
    query.setParameter("emp_skills", emp_skills); 
    query.setParameter("emp_department_id", emp_department_id); 
    query.setParameter("emp_notes", emp_notes); 
    query.setParameter("emp_email", emp_email); 
    query.setParameter("emp_username", emp_username); 
    query.setParameter("emp_password", emp_password); 
    query.setParameter("emp_phone", emp_phone); 
    int result = query.executeUpdate(); 

Основная цель именованного параметра - мы не беспокоимся о заказе, и это легко понять и обслуживать.

0

java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based! вводит в заблуждение.

В вашем JPQL запросе, использовать это условие emp_phone=:emp_phone с параметром emp_phone, но значение параметра никогда не устанавливается в запросе:

Query query = ses.createQuery(
    "update EmployeeDetails emp set..emp_phone=:emp_phone"); 

    query.setParameter(emp_id, emp_id); 
    query.setParameter(new_emp_id, new_emp_id); 
    query.setParameter(emp_name, emp_name); 
    query.setParameter(emp_designation_id, emp_designation_id); 
    query.setParameter(emp_skills, emp_skills); 
    query.setParameter(emp_department_id, emp_department_id); 
    query.setParameter(emp_notes, emp_notes); 
    query.setParameter(emp_email, emp_email); 
    query.setParameter(emp_username, emp_username); 
    query.setParameter(emp_password, emp_password); 
    int result = query.executeUpdate(); 

Так, Hibernate генерирует исключение.

+0

Да, вы правы. Но здесь парень смешивается с параметрами «Именованные» с помощью индексированных понятий параметров. –

Смежные вопросы