在插入正确的数据存储空间之前检查?

时间:2012-11-20 12:37:11

标签: google-app-engine google-cloud-datastore

首先对不起我的英语我使用谷歌翻译。

我是使用Google App Engine的新手,我放置了一个用户,但首先我需要检查一个用户是否存在,并且我注意到电子邮件“是唯一的密钥”,如果我这样做,请告诉我正确的方式。

伪代码就是这样:

类NewUser

if not exist mail
    put user to database
    return true
else
    return false

Servlet InsertUser:

if not NewUser.put
    redirect login.jsp
else
    redirect user.jsp

这是代码:

NewUser类:

public static boolean insert(String name, String mail, String password) {
    DatastoreService datastore = DatastoreServiceFactory
            .getDatastoreService();

    Key k = KeyFactory.createKey(User.class.getSimpleName(), mail);

    if (!userExist(k)) {
        Entity user = new Entity(k);
        user.setProperty("name", name);
        user.setProperty("password", Encrypt.MD5(password));
        datastore.put(user);
        return true;
    } else {
        return false;
    }

}

private static boolean userExist(Key key) {
    DatastoreService datastore = DatastoreServiceFactory
            .getDatastoreService();

    Query q = new Query(key).setKeysOnly();

    List<Entity> ent = datastore.prepare(q).asList(
            FetchOptions.Builder.withDefaults());

    return (ent.isEmpty() || ent == null) ? false : true;
}

和Servlet:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    resp.setContentType("text/plain");

    resp.sendRedirect(NewUser.insert(req.getParameter("name"),
            req.getParameter("mail"), req.getParameter("password")) ? "jsps/user.jsp"
            : "jsps/login.jsp");

}

我可以在没有查询的情况下检查电子邮件吗?

此代码有效,但我正在寻找有关如何使其更好的建议。

提前致谢。

1 个答案:

答案 0 :(得分:0)

要检查实体是否存在,您只需使用get(key)

private static boolean userExist(Key key) {
    DatastoreService datastore = DatastoreServiceFactory
        .getDatastoreService();

    try {
        datastore.get(key);
    } catch (EntityNotFoundException e){
        return false;
    }
    return true;
}