обновление в базе данных в JDO с помощью google app engine .. не работает? - PullRequest
0 голосов
/ 03 апреля 2012

Мне нужно обновить некоторые записи в моей базе данных, используя jdo в Java, и я использую Google App Engine, хотя я правильно пишу код, обновление не работает со мной ??это мой код

    @SuppressWarnings("serial")
public class GoUpdate extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        String msg = req.getParameter("msg");
        String oldname = req.getParameter("nameold");
        String name = req.getParameter("name");
        String o = req.getParameter("salary");
        int salary = Integer.parseInt(o);
        String datestring = req.getParameter("date");
        Date date = null;
        try {
            date = new SimpleDateFormat("dd-MM-yyyy").parse(datestring);// 10-10-2010
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        PersistenceManager pm = PMF.get().getPersistenceManager();
        Query query = pm.newQuery(User.class, "name == nameParam");

        query.declareParameters("String nameParam");

        List<User> list = (List<User>) query.execute(oldname);

        try {
            for (User obj : list) {

                 {


                obj.name = name;
                obj.salary = salary;
                obj.date = date;
                req.setAttribute("msg1", msg);
                pm.makePersistent(obj);

            }
        } finally {

            pm.close();
            resp.getWriter().println(">>>>>>>>>>");
        }

        RequestDispatcher view = req.getRequestDispatcher("view");

        try {

            view.forward(req, resp);
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // resp.sendRedirect("view");

    }

Ответы [ 2 ]

0 голосов
/ 05 апреля 2012

Один из способов обновить объект с помощью JDO - это извлечь объект, а затем изменить его, пока PersistenceManager, вернувший объект, еще открыт. Изменения сохраняются при закрытии PersistenceManager. Например:

public void updateUserTitle(User user, String newTitle) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        User e = pm.getObjectById(User.class, user.getId());

            e.setTitle(newTitle);
        } finally {
        pm.close();
    }
}
0 голосов
/ 04 апреля 2012

По словам "не работает", я предполагаю, что он не обновил ваше хранилище данных, в отличие от вас произошла ошибка. Если это так, вам нужно начать и зафиксировать транзакцию JDO, если вы хотите обновить хранилище данных через этот API:

    pm.currentTransaction().begin(); // <<<
    for (User obj : list) {
        obj.name = name;
        obj.salary = salary;
        obj.date = date;
        req.setAttribute("msg1", msg);
        pm.makePersistent(obj);
    }
    pm.currentTransaction().commit(); // <<<
...