Neo4j - 原生Java API
在本章中,我们将使用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程序
第2步 -创建Neo4j数据库
GraphDatabaseFactory dbFactory = new GraphDatabaseFactory(); GraphDatabaseService db= dbFactory.newEmbeddedDatabase("C:/TPNeo4jDB");
它在指定的路径为我们创建一个Schema / Database,如下所示。这类似于Oracle SQL的“CREATE DATABASE”命令。
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数据库文件夹,然后单击“开始”按钮
一旦此数据库成功启动,通过单击“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人员将更新数据库属性以允许一次允许一些数量的锁。