1

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

我是使用 Google App Engine 的新手,并且我放置了一个用户,但首先我需要检查一个用户是否已经存在,并且我在电子邮件中注明“是唯一键”并让我知道我是否以正确的方式进行操作。

伪代码是这样的:

新用户类

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

Servlet 插入用户:

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

这是代码:

新用户类:

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

}

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

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

提前致谢。

4

1 回答 1

0

要检查实体是否存在,您可以简单地使用get(key)

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

    try {
        datastore.get(key);
    } catch (EntityNotFoundException e){
        return false;
    }
    return true;
}
于 2012-11-20T13:42:51.847 回答