【问题标题】:Write HTTPServletRequest stream to Datastore of Google App Engine将 HTTPServletRequest 流写入 Google App Engine 的 Datastore
【发布时间】:2013-05-17 13:46:06
【问题描述】:

我是 App Engine 和 Java 开发的新手,我尝试通过 Http Post 接收 InputStream 并将其存储到 Datastore 中。

为了测试这一点,我使用另一台计算机的正常运行时间并在一个流中发送 10 个正常运行时间值。

每当我对此进行测试时,机器都会以 COUNT 最多 10 和正常运行时间值作为响应。但是 Datastore Viewer 只存储了一项。我究竟做错了什么?我认为使用 Memcache 的数据量并不多,尽管这是更好的方法,我稍后会这样做。

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Entity uptime = new Entity("Uptime");

    BufferedReader buff = req.getReader();
    String line = buff.readLine();

    PrintWriter out = resp.getWriter();     

    int n = 0;
    Date timestamp = new Date();

    while (line != null){
        uptime.setProperty("timestamp", timestamp);
        uptime.setProperty("value",  line);
        datastore.put(uptime);
        //Ouput for Debug purpose
        out.println("COUNT: " + n + " LINE: " + line);
        n++;

        line = buff.readLine();
    }
}

【问题讨论】:

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


    【解决方案1】:

    循环时不会创建新的 Entity 对象,只是更改现有对象的属性。

    while (line != null){
        Entity uptime = new Entity("Uptime"); // remove the declaration/initialization from before, create a new every loop
        uptime.setProperty("timestamp", timestamp);
        uptime.setProperty("value",  line);
        datastore.put(uptime);
        //Ouput for Debug purpose
        out.println("COUNT: " + n + " LINE: " + line);
        n++;
    
        line = buff.readLine();
    }
    

    我不确定您的数据存储区如何识别对象(它只是一个 Map,对象 ID 是什么,它的 equals() 方法有什么作用?)但它应该以这种方式区分它们。

    【讨论】:

    • 天哪。太容易了,我一整天都看不到它。非常感谢。我一定会一遍又一遍地阅读 Datastore 文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2012-07-09
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多