Java 使用google app engine在JDO中的数据库中进行更新。它不起作用吗?
我需要使用java中的jdo和google app engine更新数据库中的一些条目 虽然我写的代码正确,但更新对我来说不起作用?? 这是我的密码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
@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页面的日志文件?