2

我能够通过 Java 在 Neo4j 数据库上创建节点和关系。当我尝试在下一次运行中访问创建的节点时,出现此错误:

Exception in thread "main" org.neo4j.graphdb.NotFoundException: Node 27 not found

在 webadmin 界面中,仪表板显示通过 Java 创建的节点/关系的数量,但是当我发出此查询时: START n=node(*) RETURN n; 我在输出中只有 1 个节点。

(仅供参考,我已经在我的 Windows 机器(本地)中安装了 Ne04j,并使用嵌入式数据库 Java 代码来创建节点。)我用来连接数据库的 Java 代码:

final String dbpath = "C:\\neo4j-community-1.9.4\\data\\graph.db";      
GraphDatabaseService graphdb =  new GraphDatabaseFactory().newEmbeddedDatabase(dbpath);

我在 ne04j-server.properties 中使用的设置是:

org.neo4j.server.database.location=/C:/neo4j-community-1.9.4/data/graph.db/
org.neo4j.server.webserver.https.keystore.location=data/keystore
org.neo4j.server.webadmin.rrdb.location=data/rrd
org.neo4j.server.webadmin.data.uri=/C:/neo4j-community-1.9.4/data/graph.db/
org.neo4j.server.webadmin.management.uri=/db/manage/

当我通过 Java 创建节点时,数据/密钥库文件不会被填充,只有在通过 webadmin 界面创建节点时才会被填充。将密钥库文件的路径更改为绝对路径也不起作用。

任何人都可以指出这种情况下的错误,谢谢。

4

3 回答 3

2

问题是创建的节点没有被提交。要提交节点,我们必须给出finish()

try{
Transaction tx = graphdb.beginTx();
final String dbpath = "/C:/neo4j-community-1.9.4/data/graph.db/";
GraphDatabaseService graphdb =  new GraphDatabaseFactory().newEmbeddedDatabase(dbpath);
Node n1 = graphdb.createNode();
n1.setProperty("type", "company");
n1.setProperty("location", "india");
....
...
}} catch(Exception e){
   tx.failure();
} finally {
   tx.success();
  **tx.finish();**
}
于 2013-10-08T06:59:32.843 回答
1

Ranjith 的回答直到最近都是正确的,但 tx.finish() 现在已被弃用。

tx.close(); 现在是提交或回滚事务的正确方法 - 它会根据您之前是否调用过 tx.success() 来执行其中一种。

他们改变了这一点,因此事务可以在尝试使用资源块时自动关闭。

于 2015-06-24T14:51:38.910 回答
0

你有没有尝试过:

String dbpath = "C:/neo4j-community-1.9.4/data/graph.db"; 
于 2013-10-06T06:42:29.110 回答