如何浏览本地Java应用程序引擎数据存储?

如何浏览本地Java应用程序引擎数据存储?,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,对于googleappengine的Java实现,似乎没有Python appengine的_ah/admin的等价物 是否有手动方式可以浏览数据存储?在我的机器上哪里可以找到文件?(我在OS X上使用带有Eclipse的应用程序引擎插件)。我在Windows+Eclipse环境中的\war\WEB-INF\appengine generated\local\u db.bin上有本地数据存储 据我所知,它使用名为“协议缓冲区”的内部格式。我没有外部工具以人类可读的格式显示文件 我使用简单的“查看

对于googleappengine的Java实现,似乎没有Python appengine的_ah/admin的等价物


是否有手动方式可以浏览数据存储?在我的机器上哪里可以找到文件?(我在OS X上使用带有Eclipse的应用程序引擎插件)。

我在Windows+Eclipse环境中的\war\WEB-INF\appengine generated\local\u 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));
        }
    }
}
public void doGet(HttpServletRequest-req、HttpServletResponse-resp)
抛出IOException
{
分别为setContentType(“文本/普通”);
final DatastoreService datastore=DatastoreServiceFactory.getDatastoreService();
最终查询=新查询(“表/实体名称”);
//query.addSort(Entity.KEY\u RESERVED\u属性,query.SortDirection.DESCENDING);
for(最终实体:datastore.prepare(query.asIterable()){
resp.getWriter().println(entity.getKey().toString());
最终映射属性=entity.getProperties();
最终字符串[]propertyNames=properties.keySet().toArray(
新字符串[properties.size()];
for(最终字符串propertyName:propertyNames){
resp.getWriter().println(“->”+propertyName+”:“+entity.getProperty(propertyName));
}
}
}
目前没有用于Java SDK的数据存储查看器-下一个SDK版本中应该会有一个。同时,您最好编写自己的管理界面,使用数据存储查看代码,或者等待下一个SDK版本

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

:“开发应用服务器终于有了一个数据查看器。在本地启动应用程序,并将浏览器指向
http://localhost:8888/_ah/admin
http://localhost:8000/datastore
*以查看它。”


*从1.7.7开始,由于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));
            }
        }
    }
}
public void doGet(HttpServletRequest-req,HttpServletResponse-resp)抛出IOException{
字符串entityParam=req.getParameter(“e”);
分别为setContentType(“文本/普通”);
final DatastoreService datastore=DatastoreServiceFactory.getDatastoreService();
//原始查询
最终查询queryorg=新查询(entityParam);
queryOrig.addSort(Entity.KEY\u RESERVED\u属性,Query.SortDirection.升序);
for(最终实体entityOrig:datastore.prepare(queryOrig.asIterable()){
//此实体及其所有子实体和集合的查询
最终查询=新查询();
query.set祖先(entityOrig.getKey());
query.addSort(Entity.KEY\u RESERVED\u属性,query.SortDirection.升序);
for(最终实体:datastore.prepare(query.asIterable()){
resp.getWriter().println(entity.getKey().toString());
//打印属性
最终映射属性=entity.getProperties();
最终字符串[]propertyNames=properties.keySet().toArray(新字符串[properties.size()]);
for(最终字符串propertyName:propertyNames){
resp.getWriter().println(“->”+propertyName+”:“+entity.getProperty(propertyName));
}
}
}
}

需要注意的是,空集合/引用实体不会显示任何内容。

在最新版本的SDK(1.7.6+)中,dev服务器的管理部分随附更改了位置

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

http://localhost:8000

以及数据存储查看器:

http://localhost:8000/datastore


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

用文本编辑器打开
\war\WEB-INF\appengine-generated\local\u db.bin
文件,如记事本++


数据被置乱了,但至少你可以读取它,也可以复制以提取它。

对我来说,修复方法是使用下面的
gcloud
命令登录

gcloud auth application-default login

新的管理界面仍然不能与本机数据存储API创建的种类/实体一起使用。所以我仍然需要我的“查看器”:(请注意端口已更改),它对我来说像个冠军一样工作-但我将试用App扳手只是为了比较。非常感谢!我真的需要这个来调试一个持久性问题。这是多余的——请参阅上面dfrankow的帖子。你是指我发布此回复几天后发布的博客帖子的链接?”“过时的”我会接受,但多余和被否决有点残忍。我同意。当时回答得很好;“现在,”麦克赫姆说,“这个对我有用。另一方面,这里的其他答案是不正确的。代码是好的,但查询构造函数的参数是错误的:表不正确,它必须是实体名称。在留言簿示例中,它将是“问候语”,即行。我试过了,但没有成功:最终查询=新查询(“留言簿/问候语”);另一个问题:如何用代码显示表的不同键/名称的内容?如guestbook1、gb2等。此代码查找所有实体及其子实体,如果子实体也有子实体呢?这个函数将作为递归运行吗?