阅读(2219) (2)

Neo4j - 原生Java API

2016-12-19 07:40:50 更新

在本章中,我们将使用Neo4j Native Java API开发和测试Java应用程序。 我们将在下一章讨论Neo4j Cypher Java API。


在开发应用程序之前,请参考“Neo4j Java环境设置”一章来设置Eclipse IDE来开发此应用程序


Neo4j原生Java API示例

此示例演示如何在Eclipse IDE中开发Java应用程序以开发和测试Neo4j原生ava API示例

请按照“Neo4j Java环境设置”一章中提到的所有步骤操作


第1步 -在同一个Java项目中创建一个Java程序


创建一个Java程序
现在开始编写Neo4j Java API编码以执行Neo4j DB操作


第2步 -创建Neo4j数据库

GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService db= dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");

它在指定的路径为我们创建一个Schema / Database,如下所示。这类似于Oracle SQL的“CREATE DATABASE”命令。


创建Neo4j数据库


第3步 -启启动Neo4j数据库事务以提交我们的更改
try (Transaction tx = graphDb.beginTx()) {
	// Perform DB operations				
	tx.success();
}


所以对于你的Java程序源代码看起来像

package com.tp.neo4j.java.examples;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
public class Neo4jJavaAPIDBOperation {
  public static void main(String[] args) {
	GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
	GraphDatabaseService db = dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");
	try (Transaction tx = db.beginTx()) {
		// Perform DB operations	
		tx.success();
	}	
 }
}


第4步 -要创建节点,我们需要标签名称。 通过实现Neo4j Java API“Label”接口创建一个枚举。

package com.tp.ne4oj.java.examples;
import org.neo4j.graphdb.Label;
public enum Tutorials implements Label {
	JAVA,SCALA,SQL,NEO4J;
}


第5步 -创建节点并为其设置属性


创建两个节点

Node javaNode = db.createNode(Tutorials.JAVA);
Node scalaNode = db.createNode(Tutorials.SCALA);


设置属性

javaNode.setProperty("TutorialID", "JAVA001");
javaNode.setProperty("Title", "Learn Java");
javaNode.setProperty("NoOfChapters", "25");
javaNode.setProperty("Status", "Completed");	
	
scalaNode.setProperty("TutorialID", "SCALA001");
scalaNode.setProperty("Title", "Learn Scala");
scalaNode.setProperty("NoOfChapters", "20");
scalaNode.setProperty("Status", "Completed");


第6步 -要创建关系,我们需要关系类型。 通过实现Neo4j“关系类型”创建枚举。

package com.tp.neo4j.java.examples;
import org.neo4j.graphdb.RelationshipType;
public enum TutorialRelationships implements RelationshipType{
	JVM_LANGIAGES,NON_JVM_LANGIAGES;
}


第7步 -创建节点之间的关系并设置它的属性。

创建从Java节点到Scala节点的关系

Relationship relationship = javaNode.createRelationshipTo(scalaNode,
	TutorialRelationships.JVM_LANGIAGES);


将属性设置为此关系

relationship.setProperty("Id","1234");
relationship.setProperty("OOPS","YES");
relationship.setProperty("FP","YES");


第8步 -最终源代码。

package com.tp.neo4j.java.examples;

import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;

public class Neo4jJavaAPIDBOperation {
public static void main(String[] args) {
	GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
	GraphDatabaseService db= dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");
	try (Transaction tx = db.beginTx()) {

		Node javaNode = db.createNode(Tutorials.JAVA);
		javaNode.setProperty("TutorialID", "JAVA001");
		javaNode.setProperty("Title", "Learn Java");
		javaNode.setProperty("NoOfChapters", "25");
		javaNode.setProperty("Status", "Completed");				
		
		Node scalaNode = db.createNode(Tutorials.SCALA);
		scalaNode.setProperty("TutorialID", "SCALA001");
		scalaNode.setProperty("Title", "Learn Scala");
		scalaNode.setProperty("NoOfChapters", "20");
		scalaNode.setProperty("Status", "Completed");
		
		Relationship relationship = javaNode.createRelationshipTo
		(scalaNode,TutorialRelationships.JVM_LANGIAGES);
		relationship.setProperty("Id","1234");
		relationship.setProperty("OOPS","YES");
		relationship.setProperty("FP","YES");
		
		tx.success();
	}
	   System.out.println("Done successfully");
}
}


第9步 -在执行此Java程序之前,检查您的Neo4j是否处于关闭模式。 如果没有,请点击“停止”按钮展开它。


检查Neo4j是否处于关闭模式


第10步 -执行Java程序并在Eclipse IDE控制台中观察输出。


执行Java程序


选择我们的Neo4j数据库文件夹,然后单击“开始”按钮


Neo4j数据库文件夹


一旦此数据库成功启动,通过单击“http:// localhost:7474”链接访问Neo4j浏览器来观察我们的数据。


链接


第11步 -在Neo4j数据浏览器的$ prompt下键入以下命令

MATCH (a)-[r:JVM_LANGIAGES]->(b)
RETURN r

MATCH (a)-[r:JVM_LANGIAGES]-(b) RETURN r


单击“Java”节点以查看其属性


查看其属性

单击“Scala”节点以查看其属性


“Scala”节点

单击关系以查看其属性


关系

注意 -

如果我们的Neo4j服务器通过引用我们新创建的数据库启动和运行,那么我们不能执行我们的程序,因为服务器已经锁定了这个数据库。

所以当我们执行我们以前的程序时,我们会得到一些错误堆栈跟踪

java.io.IOException:C:\TPNeo4jDB\lock because another process already holds the lock.

为了避免这个问题,首先停止我们的服务器,然后执行程序。

因为默认情况下Neo4j DB Server一次只接受一个锁。 在实时应用程序中,Ne04J DBA人员将更新数据库属性以允许一次允许一些数量的锁。