2012-04-03 6 views
0

Ich muss einige Einträge in meiner Datenbank mit jdo in Java aktualisieren und ich benutze Google App Engine obwohl ich den Code richtig schreiben das Update hat nicht mit mir arbeiten ?? dies ist mein CodeUpdate in der Datenbank in JDO mit Google App Engine .. es hat nicht funktioniert?

@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"); 

    } 
+0

Sie vermissen die JDO-Transaktion, in JDO können Sie keine Änderungen aus einem Transaktionsbereich vornehmen. –

+0

Ich habe die Transaktion hinzugefügt und beginne, aber das Problem immer noch – Hanaa

Antwort

0

Eine Möglichkeit, ein Objekt mit JDO zu aktualisieren ist, das Objekt zu holen, dann ändern, während Der PersistenceManager, der das Objekt zurückgegeben hat, ist noch immer geöffnet. Änderungen bleiben bestehen, wenn der PersistenceManager geschlossen wird. Zum Beispiel:

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

es ist eine andere Möglichkeit, das Benutzerobjekt zu aktualisieren, in meinem Projekt bin ich sicher, dass das Programm in die for-Schleife eintritt und das Objekt aktualisiert wurde !!! , aber mein Problem im Datenspeicher wurde nicht aktualisiert :: – Hanaa

0

Durch ich es den Datenspeicher nicht aktualisiert geh mal davon aus „nicht arbeiten“, im Gegensatz zu Ihnen einen Fehler bekamen. Wenn ja, müssen Sie eine JDO Transaktion beginnen und sich zu verpflichten, wenn Aktualisierungen der Datenspeicher über diese API machen wollen:

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

dasselbe Problem es hat den Datenspeicher nicht aktualisiert – Hanaa

+0

Der Code sieht korrekt aus, so müssen Sie Ihre Konfigurationsdatei sowie eine Protokollausgabe dieses Codes mit Datanucleus-Logger auf FINE/DEBUG gesetzt, damit wir Ihnen weiterhelfen können ... – TheArchitect

+0

Wie bekomme ich die Log-Datei für die Webseite? – Hanaa