Java 使用google app engine在JDO中的数据库中进行更新。它不起作用吗?

Java 使用google app engine在JDO中的数据库中进行更新。它不起作用吗?,java,google-app-engine,servlets,persistence,jdo,Java,Google App Engine,Servlets,Persistence,Jdo,我需要使用java中的jdo和google app engine更新数据库中的一些条目 虽然我写的代码正确,但更新对我来说不起作用?? 这是我的密码 @SuppressWarnings("serial") public class GoUpdate extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOExcep

我需要使用java中的jdo和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");

    }

由于没有工作,我假设它没有更新您的数据存储,而您得到了一个错误。 如果是这样,如果您希望通过以下API对数据存储进行更新,则需要开始并提交JDO事务:

    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(); // <<<

使用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();
    }
}

您缺少JDO事务,在JDO中,您不能在事务范围外进行任何修改。我已添加了事务开始和提交,但问题仍然是它是更新用户对象的另一种方式,在我的项目中,我确保程序进入for循环,并且对象已更新!!!但是我在数据存储上的问题仍然没有更新::代码看起来是正确的,因此您需要发布配置文件以及此代码的日志输出,并将datanucleus loggers设置为FINE/DEBUG,以便我们能够在这方面进一步帮助您…我如何获取web页面的日志文件?