在本章中,我们将使用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程序
现在开始编写Neo4j Java API编码以执行Neo4j DB操作
第2步 -创建Neo4j数据库GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService db= dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");
它在指定的路径为我们创建一个Schema / Database,如下所示。这类似于Oracle SQL的“CREATE DATABASE”命令。
第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是否处于关闭模式。 如果没有,请点击“停止”按钮展开它。
第10步 -执行Java程序并在Eclipse IDE控制台中观察输出。
选择我们的Neo4j数据库文件夹,然后单击“开始”按钮
一旦此数据库成功启动,通过单击“http:// localhost:7474”链接访问Neo4j浏览器来观察我们的数据。
第11步-在Neo4j数据浏览器的$ prompt下键入以下命令
MATCH(a)-[r:JVM_LANGIAGES]->(b)RETURN r
单击“Java”节点以查看其属性
单击“Scala”节点以查看其属性
单击关系以查看其属性
注意 -
如果我们的Neo4j服务器通过引用我们新创建的数据库启动和运行,那么我们不能执行我们的程序,因为服务器已经锁定了这个数据库。
所以当我们执行我们以前的程序时,我们会得到一些错误堆栈跟踪
java.io.IOException:C:\TPNeo4jDB\lock because another process already holds the lock.
为了避免这个问题,首先停止我们的服务器,然后执行程序。
因为默认情况下Neo4j DB Server一次只接受一个锁。 在实时应用程序中,Ne04J DBA人员将更新数据库属性以允许一次允许一些数量的锁。