我有一个简单的Query方法来运行cypher查询,如下所示。如果我在Web控制台中运行EXACT相同的查询(是的,相同的数据库实例,正确的路径),我在控制台中得到non-empty iterator
。我不应该1)没有得到那个消息,2)得到我在数据库中看到的结果?
此类具有将数据添加到数据库的其他方法,并且该功能运行良好。此查询方法无效...
类别:
import org.neo4j.cypher.javacompat.ExecutionEngine;
import org.neo4j.cypher.javacompat.ExecutionResult;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.helpers.collection.IteratorUtil;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.sql.*;
public class NeoProcessor {
//private GraphDatabaseService handle;
private static final String DB_PATH = "/usr/local/Cellar/neo4j/2.0.1/libexec/data/new_graph.db";
static GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
public NeoProcessor()
{
}
public void myQuery(String cypherText)
{
//System.out.println("executing the above query");
cypherText = "MATCH (n:Phone{id:'you'}) MATCH n-[r:calling]->m WHERE n<>m RETURN n, r, m";
ExecutionEngine engine = new ExecutionEngine( this.graphDb );
ExecutionResult result;
try ( Transaction ignored = graphDb.beginTx() )
{
result = engine.execute( cypherText + ";");
System.out.println(result);
ignored.success();
}
}
}
下面的图片展示了查询如何从数据库中获得结果:
答案 0 :(得分:1)
要使用结果,您需要使用迭代器。如果您只想要字符串表示,请使用ExecutionResult.dumpToString()
。请注意,此方法会耗尽迭代器。
答案 1 :(得分:1)
你应该打电话:
System.out.println(result.dumpToString)
哪个会为你美化它。当然,你的比赛总是有可能没有结果。你也会在最后一个区块中关闭交易,尽管这在这里并不重要。
编辑:再看一下,你的Cypher查询错误地形成了,它应该是
MATCH (n:Phone) - [r:calling] -> (m)
WHERE n.id = `you'
RETURN n, r, m
答案 2 :(得分:1)
result = engine.execute(cypherText + ";");
System.out.println(result.dumpToString());
指定人: http://api.neo4j.org/2.0.3/org/neo4j/cypher/javacompat/ExecutionResult.html#dumpToString()