首先对不起我的英语我使用谷歌翻译。
我是使用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");
}
我可以在没有查询的情况下检查电子邮件吗?
此代码有效,但我正在寻找有关如何使其更好的建议。
提前致谢。
答案 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;
}