使用java嵌入式密码查询获取节点的属性

时间:2013-07-01 20:08:31

标签: java neo4j cypher

目前有一个密码查询方法

public static void RunQuery(String _query)
{
    Properties prop = new Properties();
    final String DB_PATH = "path/to/db"
    GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
    ExecutionEngine engine = new ExecutionEngine(graphDb);
    ExecutionResult result = engine.execute(_query);
    for(Map<String,Object> map : result)
    {
        System.out.println(map.toString());
    }
    graphDb.shutdown();


}

然而,这只能让我得到这样的结果:

{a=Node[11303]}
{a=Node[11341]}
{a=Node[11343]}
{a=Node[11347]}
{a=Node[11349]}
{a=Node[11378]}

如何扩充它以吐出整个查询结果,就像cypher shell一样?

2 个答案:

答案 0 :(得分:2)

您的查询是什么样的。返回的Map<String, Object>将包含您返回的变量的键。 Object可以是Path,Node或Relationship,这只会调用它们上的本机toString(),它们在Java代码中只返回节点ID。您必须构建自己的打印机,这将获得属性键并迭代它们中的每一个。

for (String key : node.getPropertyKeys()) {
    System.out.println("Key: " + key + ", Value: " +  node.getProperty(key));
}

答案 1 :(得分:-1)

这取决于您的查询的RETURN ..

例如,如果您有这样的查询:

_query="Start x= node(someIndex) Match x-[rel:SOMETHING]-n Return n";

所以,你的代码可以是

    ExecutionResult result = engine.execute(_query);
    Iterator<Node> n_column = result.columnAs("n");
            for (Node outputNode: IteratorUtil.asIterable(n_column)) {
                System.out.println(outputNode.getProperty("yourKey","defaultValueIfNull"));
            }