如何浏览本地Java App Engine数据存储区?


84

似乎没有与Google App Engine的Java实现等效的Python App Engine的_ah / admin。

有没有可以浏览数据存储的手动方法?在我的机器上哪里可以找到文件?(我在OS X上将App Engine插件与Eclipse一起使用)。

Answers:


111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html:“最后,开发者应用服务器具有一个数据查看器。在本地启动您的应用并指向您的浏览器*进行检查。”http://localhost:8888/_ah/admin http://localhost:8000/datastore

*自1.7.7起


新的管理界面仍无法与Native Datastore API创建的种类/实体一起使用。所以我仍然需要我的“查看者” :)
Paul

15
localhost:8888 / _ah / admin对我来说就像冠军(请注意端口已更改)-但我将尝试AppWrench进行比较。
乍得·戈尔辛

非常感谢!我真的需要这样做来调试持久性问题。
2012年

40

Java SDK目前没有数据存储查看器-在下一个SDK版本中应该会出现这种查看器。同时,最好的选择是使用数据存储区查看代码编写自己的管理界面-或等待下一个SDK版本。

Java App Engine现在具有一个本地数据存储查看器,可以通过访问http://localhost:8080/_ah/admin


这是多余的-请参阅上面的dfrankow帖子。
朱利安·H

23
您的意思是指向我发布此回复几天发布的博客文章的链接吗?我会接受“过时”的信息,但多余并被否决有点残酷。
尼克·约翰逊,

1
我同意。当时的答案很好;现在已经过时了。
mcherm

@mcherm这个人为我工作。另一方面,这里的其他答案没有。
约翰尼

6

我在Windows + Eclipse环境中的\ war \ WEB-INF \ appengine-generation \ local_db.bin中有本地数据存储

据我了解,它使用名为“协议缓冲区”的内部格式。我没有外部工具以人类可读的格式显示文件。

我正在使用像这样的简单“查看器”代码:

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException 
{

    resp.setContentType("text/plain");

    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    final Query query = new Query("Table/Entity Name");
    //query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.DESCENDING);

    for (final Entity entity : datastore.prepare(query).asIterable()) {
        resp.getWriter().println(entity.getKey().toString());

        final Map<String, Object> properties = entity.getProperties();
        final String[] propertyNames = properties.keySet().toArray(
            new String[properties.size()]);
        for(final String propertyName : propertyNames) {
            resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
        }
    }
}

代码不错,但是查询构造函数的参数错误:表不正确,可能是实体名称。在留言簿示例中,该行将是“ greeting”。我尝试了此方法,但不起作用:最终查询查询= new Query(“访客留言簿/问候”); 另一个问题:如何用代码显示表的不同键/名称的内容?像guestbook1,gb2等一样
Timo

2

在最新版本的SDK(1.7.6+)中,开发服务器的admin部分随其更改了位置

分析服务器输出日志,我们可以看到它可以在以下位置访问:

http://localhost:8000

数据存储查看器:

http://localhost:8000/datastore

看起来很整洁-根据Google的新设计指南。


1

由于Google App Engines数据存储查看器不支持显示引用实体的集合,因此我修改了Paul的版本以显示所有后代实体:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String entityParam = req.getParameter("e");

    resp.setContentType("text/plain");
    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    // Original query
    final Query queryOrig = new Query(entityParam);
    queryOrig.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);

    for (final Entity entityOrig : datastore.prepare(queryOrig).asIterable()) {

        // Query for this entity and all its descendant entities and collections
        final Query query = new Query();
        query.setAncestor(entityOrig.getKey());
        query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);

        for (final Entity entity : datastore.prepare(query).asIterable()) {
            resp.getWriter().println(entity.getKey().toString());

            // Print properties
            final Map<String, Object> properties = entity.getProperties();
            final String[] propertyNames = properties.keySet().toArray(new String[properties.size()]);
            for(final String propertyName : propertyNames) {
                resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
            }
        }
    }
}

应该注意的是,对于空集合/引用实体,什么也不显示。


此代码查找您的所有实体及其子实体,如果子实体也有子实体怎么办?此函数将作为递归运行吗?
Pini Cheyni '16

1

打开 \war\WEB-INF\appengine-generated\local_db.bin使用文本编辑器(如Notepad ++)文件。

数据已加密,但至少您可以读取它,并且可以复制以提取它。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.