【问题标题】:Error while retrieving neo4j node data through java通过java检索neo4j节点数据时出错
【发布时间】:2013-08-23 05:05:38
【问题描述】:

我已经通过 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 中看到的那样,我正在尝试撤销 node(0),这给了我正确的结果

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

但是一旦我给出像 START n = node(1) return 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)

但如果我在 neo4j shell 的 Web UI 中运行 START n = node(1) return n 这个查询,它会给我正确的结果。

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

【问题讨论】:

    标签: java database graph neo4j cypher


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      能够解决这个挑战。提及完整的 DB_PATH。感谢所有为此付出时间的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-06
        相关资源
        最近更新 更多