通过java检索neo4j节点数据时出错

我通过talend将大约60k个节点加载到neo4j中。 我想通过java访问这些节点。 Java代码只能获取neo4j本身附带的单个节点,即第0个节点。

我的Java代码是:

package com.Neo4J; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.naming.spi.DirStateFactory.Result; import org.neo4j.cypher.javacompat.ExecutionEngine; import org.neo4j.cypher.javacompat.ExecutionResult; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.factory.GraphDatabaseFactory; import org.neo4j.helpers.collection.IteratorUtil; import org.neo4j.kernel.impl.util.FileUtils; import org.neo4j.tooling.GlobalGraphOperations; public class CaseNeo4J { private static final String DB_PATH = "data/graph.db"; GraphDatabaseService graphDataService; String nodeResult, resultString, columnsString; String rows = ""; public static void main(String args[]) { CaseNeo4J neoobj = new CaseNeo4J(); neoobj.connect(); } void connect() { graphDataService = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH); Transaction transaction = graphDataService.beginTx(); try { ExecutionEngine engine = new ExecutionEngine(graphDataService); ExecutionResult result = engine.execute("START n = node(0) return n"); System.out.println(result.dumpToString()); } finally { transaction.finish(); } } } 

正如您在CQL中看到的那样,我正在尝试退出节点(0),它给出了正确的结果

 +-----------+ | n | +-----------+ | Node[0]{} | +-----------+ 1 row 

但是一旦我给出像START n = node(1)返回n的查询,它就会抛出错误 –

 Exception in thread "main" org.neo4j.cypher.EntityNotFoundException: Node 1 not found at org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.getById(GDSBackedQueryC ontext.scala:80) at org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.getById(GDSBackedQueryC ontext.scala:48) at org.neo4j.cypher.internal.executionplan.builders.NodeByIdBuilder$$anonfun$org$neo4j$cypher$ internal$executionplan$builders$NodeByIdBuilder$$f$1$1.apply(NodeByIdBuilder.scala:41) at org.neo4j.cypher.internal.executionplan.builders.NodeByIdBuilder$$anonfun$org$neo4j$cypher$ internal$executionplan$builders$NodeByIdBuilder$$f$1$1.apply(NodeByIdBuilder.scala:41) at org.neo4j.cypher.internal.executionplan.builders.GetGraphElements$.org$neo4j$cypher$interna l$executionplan$builders$GetGraphElements$$castElement$1(GetGraphElements.scala:30) at org.neo4j.cypher.internal.executionplan.builders.GetGraphElements$$anonfun$getElements$3.ap ply(GetGraphElements.scala:40) at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) at scala.collection.Iterator$$anon$13.next(Iterator.scala:372) at org.neo4j.cypher.internal.ClosingIterator$$anonfun$next$1.apply(ClosingIterator.scala:44) at org.neo4j.cypher.internal.ClosingIterator.failIfThrows(ClosingIterator.scala:86) at org.neo4j.cypher.internal.ClosingIterator.next(ClosingIterator.scala:43) at scala.collection.Iterator$class.foreach(Iterator.scala:727) at org.neo4j.cypher.internal.ClosingIterator.foreach(ClosingIterator.scala:31) at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48) at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:178) at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:45) at scala.collection.TraversableOnce$class.to(TraversableOnce.scala:259) at org.neo4j.cypher.internal.ClosingIterator.to(ClosingIterator.scala:31) at scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:243) at org.neo4j.cypher.internal.ClosingIterator.toList(ClosingIterator.scala:31) at org.neo4j.cypher.PipeExecutionResult.eagerResult(PipeExecutionResult.scala:100) at org.neo4j.cypher.PipeExecutionResult.dumpToString(PipeExecutionResult.scala:103) at org.neo4j.cypher.PipeExecutionResult.dumpToString$lzycompute(PipeExecutionResult.scala:143) at org.neo4j.cypher.PipeExecutionResult.dumpToString(PipeExecutionResult.scala:140) at org.neo4j.cypher.javacompat.ExecutionResult.dumpToString(ExecutionResult.java:102) at com.Neo4J.CaseNeo4J.connect(CaseNeo4J.java:45) at com.Neo4J.CaseNeo4J.main(CaseNeo4J.java:32) 

但是如果我运行START n = node(1)在neo4j shell的web UI中返回此查询,它会给我正确的结果。

对此有什么想法吗? 如果我在这里得到一些解决方案,我将非常感激。 谢谢!

您确定要使用与neo4j服务器实例和talend使用的DB_PATH相同的数据位置吗? 你能检查绝对路径吗? 当AFAIK在没有数据的路径上启动嵌入式数据库实例时,它会从头开始创建一个空数据集,该数据集只包含一个id为0的根节点。

能够解决这一挑战。 提及完整的DB_PATH。 谢谢所有给我时间的人。