0

我对 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();
    }
}
4

1 回答 1

2

循环时不会创建新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();
}

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

于 2013-05-22T13:26:52.670 回答