首页 文章

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

提问于
浏览
84

对于Google App Engine的Java实现,似乎没有相应的Python App Engine的_ah / admin .

有没有手动方式我可以浏览数据存储区?我的机器上的文件在哪里? (我在OS X上使用Eclipse的App Engine插件) .

6 回答

  • 1

    在最新版本的SDK(1.7.6)中,开发服务器的管理部分随之改变了它的位置

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

    http://localhost:8000

    和数据存储区查看器:

    http://localhost:8000/datastore

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

  • 111

    http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html:“最后,dev appserver有一个数据查看器 . 在本地启动你的应用程序并将你的浏览器指向http:// localhost:8888 / _ah / admin http://localhost:8000/datastore *来检查它 . ”

    *截至1.7.7

  • 6

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

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

  • 2

    我在我的Windows Eclipse环境中的\ war \ WEB-INF \ appengine-generated \ 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));
            }
        }
    }
    
  • 40

    由于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));
                }
            }
        }
    }
    

    应该注意,没有为空集合/引用实体显示任何内容 .

  • 1

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

    数据是乱码的,但至少你可以阅读它,你可以复制以提取它 .

相关问题