您的位置:首页 > 数据库

Google App Engine 数据库

2013-06-27 19:12 344 查看
环境设置:《在gae平台上开发jsp网站

Broker.java 一段java读写数据库的操作

package bagebit;

// java 标准库
import java.io.IOException;
import java.util.logging.Logger;
import javax.servlet.http.*;
import java.util.Date;
// GAE 标准库
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.*;
// 第三方库
// ...

/**
* 用户【User】表定义
*
* ******************************************************************************
* @login
* @password
* @email
* @nickname
*/

/**
* 资源【Resource】表定义
* ******************************************************************************
* @type  [picture, audio, video, text, url]
* @link
* @login -> User::login
* @tags
*/

/**
* 标签【Tag】表定义
* ******************************************************************************
* @tag -> Resource::tags
* @popular
*/

public class Broker extends HttpServlet {

// 系统日志
private static final Logger log =
Logger.getLogger(Broker.class.getName());

// 数据库连接
private static final DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();

/**
* 所有HTTP GET请求的入口
*/
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
log.info("Broker::doGet called at: " + (new java.util.Date()).toString());
resp.setContentType("text/html;charset=UTF-8");

// 根据请求的方法调度
String method = req.getParameter("method");

// 接口 - 创建用户
if (method.compareToIgnoreCase("CreateUser") == 0){
String login = req.getParameter("login");
if (login == null || login.isEmpty()){
return ;
}
String password = req.getParameter("password");
if (password == null || password.isEmpty()){
return ;
}
String email = req.getParameter("email");
if (email == null){
email = "";
}
String nickname = req.getParameter("nickname");
if (nickname == null){
nickname = "";
}

if (!CreateUser(login, password, email, nickname)){
log.warning("Failed to create User.");
}else{
log.info("OK, User [" + login + "] created");
}

//ListUsers(resp);

}else

// 接口 - 创建资源
if (method.compareToIgnoreCase("CreateResource") == 0){
String resource = req.getParameter("resource");
CreateResource(resource);
}else

// 接口 - 创建标签
if (method.compareToIgnoreCase("CreateTag") == 0) {
String tag = req.getParameter("tag");
if (!CreateTag(tag)){

}else{

}
//ListTags(resp);
}

// 接口 - 未定义
else{
// TODO: log
}
}

/**
* 创建用户
* **************************************************************************
* 参数
* @login       - 登录名
* @password    - 登录密码
* @email       - 注册邮箱
* @nickname    - 昵称
* **************************************************************************
* @return     - 成功返回true,失败返回false
*/
private boolean CreateUser(String login, String password, String email
, String nickname){
if (IsUserExisted(login)){
log.warning("User [" + login + "] is already existed!");
return false;
}
log.info("Create User, login=" + login + ", password=" + password);
Entity user = new Entity("User");
user.setProperty("login", login);
user.setProperty("password", password);
datastore.put(user);
return true;
}

private boolean CreateTag(String tag){
if (IsTagExisted(tag)){
log.warning("Tag [" + tag + "] is already existed!");
return false;
}
log.info("Create Tag, tag=" + tag);
Entity t = new Entity("Tag");
t.setProperty("tag", tag);
t.setProperty("popular", 0);
datastore.put(t);
return true;
}

boolean CreateResource(String resource){
return true;
}

private boolean IsUserExisted(String login){
Query q = new Query("User");
q.setFilter(FilterOperator.EQUAL.of("login", login));
PreparedQuery pq = datastore.prepare(q);
for (Entity result : pq.asIterable()) {
// 有枚举,说明存在,直接返回。
return true;
}
return false;
}

boolean IsTagExisted(String word) {
Query q = new Query("Tag");
q.setFilter(FilterOperator.EQUAL.of("tag", word));
PreparedQuery pq = datastore.prepare(q);
for (Entity result : pq.asIterable()) {
// 有枚举,说明存在,直接返回。
return true;
}
return false;
}

private void ListUsers(HttpServletResponse resp) throws IOException{
// 创建查询
Query q = new Query("User");

// 添加排序规则
q.addSort("login", SortDirection.ASCENDING);

// 如果需要过滤器Filter参考Google的文档
// ...
// addFilter(...) is deprecated. see https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Query.Filter // and https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Query.CompositeFilter PreparedQuery pq = datastore.prepare(q);
for (Entity result : pq.asIterable()) {
String login = (String) result.getProperty("login");
resp.getWriter().println("<b>LoginName: </b>" + login + "<br>");
}
}

private void ListTags(HttpServletResponse resp) throws IOException{
// 创建查询
Query q = new Query("Tag");

// 添加排序规则
q.addSort("popular", SortDirection.DESCENDING);

// 如果需要过滤器Filter参考Google的文档
// ...
// addFilter(...) is deprecated. see https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Query.Filter // and https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Query.CompositeFilter PreparedQuery pq = datastore.prepare(q);
for (Entity result : pq.asIterable()) {
String tag = (String) result.getProperty("tag");
resp.getWriter().println("<b>tag: </b>" + tag + "<br>");
}
}

/**
* 所有HTTP POST请求的入口
*/
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
return ;
}
}


参考文献:

1, 数据查询:https://developers.google.com/appengine/docs/java/datastore/queries?hl=zh-cn

2, 数据写入:https://developers.google.com/appengine/docs/java/datastore/entities?hl=zh-cn

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: