如何在使用GWT时在Google App Engine中使用更新查询。我正在尝试制作一个聊天应用程序,管理员可以编辑现有消息的部分,除了提交和删除以前的消息。
为了编辑现有的消息,需要使用更新查询,但我无法在数据存储中找到类似于更新查询的内容。
我们如何更新现有数据?
如何在使用GWT时在Google App Engine中使用更新查询。我正在尝试制作一个聊天应用程序,管理员可以编辑现有消息的部分,除了提交和删除以前的消息。
为了编辑现有的消息,需要使用更新查询,但我无法在数据存储中找到类似于更新查询的内容。
我们如何更新现有数据?
下面是来自http://www.ibm.com/developerworks/java/library/j-gaej3.html的示例代码:
您可以进行“get”操作修改数据,然后进行“make persistent”操作并提交。
主要注意事项是跨实体进行此操作 - 注意:DataStore中的数据存储不同于关系数据库。
package gaej.example.contact.server;
import gaej.example.contact.client.Contact;
import java.util.List;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
public class ContactJdoDAO implements ContactDAO {
private static final PersistenceManagerFactory pmfInstance = JDOHelper
.getPersistenceManagerFactory("transactions-optional");
public static PersistenceManagerFactory getPersistenceManagerFactory() {
return pmfInstance;
}
public void addContact(Contact contact) {
PersistenceManager pm = getPersistenceManagerFactory()
.getPersistenceManager();
try {
pm.makePersistent(contact);
} finally {
pm.close();
}
}
@SuppressWarnings("unchecked")
public List<Contact> listContacts() {
PersistenceManager pm = getPersistenceManagerFactory()
.getPersistenceManager();
String query = "select from " + Contact.class.getName();
return (List<Contact>) pm.newQuery(query).execute();
}
public void removeContact(Contact contact) {
PersistenceManager pm = getPersistenceManagerFactory()
.getPersistenceManager();
try {
pm.currentTransaction().begin();
// We don't have a reference to the selected Product.
// So we have to look it up first,
contact = pm.getObjectById(Contact.class, contact.getId());
pm.deletePersistent(contact);
pm.currentTransaction().commit();
} catch (Exception ex) {
pm.currentTransaction().rollback();
throw new RuntimeException(ex);
} finally {
pm.close();
}
}
public void updateContact(Contact contact) {
PersistenceManager pm = getPersistenceManagerFactory()
.getPersistenceManager();
String name = contact.getName();
String phone = contact.getPhone();
String email = contact.getEmail();
try {
pm.currentTransaction().begin();
// We don't have a reference to the selected Product.
// So we have to look it up first,
contact = pm.getObjectById(Contact.class, contact.getId());
contact.setName(name);
contact.setPhone(phone);
contact.setEmail(email);
pm.makePersistent(contact);
pm.currentTransaction().commit();
} catch (Exception ex) {
pm.currentTransaction().rollback();
throw new RuntimeException(ex);
} finally {
pm.close();
}
}
}
在一个已被检索或之前插入的实体上调用makePersistent()
将会更新数据存储中的实体。请参阅文档。