Google App Engine 数据库
2013-06-27 19:12
344 查看
环境设置:《在gae平台上开发jsp网站》
Broker.java 一段java读写数据库的操作
参考文献:
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
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
相关文章推荐
- 在Google App Engine中使用hash和marshal持久化模块,快速判断数据库条目是否已经存在
- (Google App Engine Datastore API)GAE数据库API翻译
- Google App Engine开发之清除本地数据库
- Google App Engine中使用数据库
- 用Google App Engine做个人代理服务器
- Google Appengine开发碰到DatastoreNeedIndexException了
- Google App Engine使用
- 基于Google App Engine 的翻F墙Q工具XX-NET部署全套攻略
- Google AppEngine 和 NetBeans ... 和 Mojarra / JSF
- gae(google app engine)原来是个好东西
- 我的第一个GAE(google appengine)应用
- 主题:菜鸟玩GAE(Google App Engine)完全指南
- Price compare: Sina App Engine vs Google App Engine
- 探索Google App Engine背后的奥秘(2)--Google的整体架构猜想
- 向Google App Engine上传数据的几个心得(下)
- google-java-app-engine
- google app engine 调试方法
- 设计遐想---基于Google App Engine的IM
- 运用spring strut2来构建google app engine应用
- Google App Engine技术架构资料大盘点