Neo4j - 原生Java API

2018-01-02 16:18 更新

在本章中,我們將使用Neo4j Native Java API開發(fā)和測試Java應(yīng)用程序。 我們將在下一章討論Neo4j Cypher Java API。


在開發(fā)應(yīng)用程序之前,請(qǐng)參考“Neo4j Java環(huán)境設(shè)置”一章來設(shè)置Eclipse IDE來開發(fā)此應(yīng)用程序


Neo4j原生Java API示例

此示例演示如何在Eclipse IDE中開發(fā)Java應(yīng)用程序以開發(fā)和測試Neo4j原生ava API示例

請(qǐng)按照“Neo4j Java環(huán)境設(shè)置”一章中提到的所有步驟操作


第1步 -在同一個(gè)Java項(xiàng)目中創(chuàng)建一個(gè)Java程序


創(chuàng)建一個(gè)Java程序
現(xiàn)在開始編寫Neo4j Java API編碼以執(zhí)行Neo4j DB操作


第2步 -創(chuàng)建Neo4j數(shù)據(jù)庫

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

它在指定的路徑為我們創(chuàng)建一個(gè)Schema / Database,如下所示。這類似于Oracle SQL的“CREATE DATABASE”命令。


創(chuàng)建Neo4j數(shù)據(jù)庫


第3步 -啟啟動(dòng)Neo4j數(shù)據(jù)庫事務(wù)以提交我們的更改
try (Transaction tx = graphDb.beginTx()) {
	// Perform DB operations				
	tx.success();
}


所以對(duì)于你的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步 -要?jiǎng)?chuàng)建節(jié)點(diǎn),我們需要標(biāo)簽名稱。 通過實(shí)現(xiàn)Neo4j Java API“Label”接口創(chuàng)建一個(gè)枚舉。

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


第5步 -創(chuàng)建節(jié)點(diǎn)并為其設(shè)置屬性


創(chuàng)建兩個(gè)節(jié)點(diǎn)

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


設(shè)置屬性

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步 -要?jiǎng)?chuàng)建關(guān)系,我們需要關(guān)系類型。 通過實(shí)現(xiàn)Neo4j“關(guān)系類型”創(chuàng)建枚舉。

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


第7步 -創(chuàng)建節(jié)點(diǎn)之間的關(guān)系并設(shè)置它的屬性。

創(chuàng)建從Java節(jié)點(diǎn)到Scala節(jié)點(diǎn)的關(guān)系

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


將屬性設(shè)置為此關(guān)系

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步 -在執(zhí)行此Java程序之前,檢查您的Neo4j是否處于關(guān)閉模式。 如果沒有,請(qǐng)點(diǎn)擊“停止”按鈕展開它。


檢查Neo4j是否處于關(guān)閉模式


第10步 -執(zhí)行Java程序并在Eclipse IDE控制臺(tái)中觀察輸出。


執(zhí)行Java程序


選擇我們的Neo4j數(shù)據(jù)庫文件夾,然后單擊“開始”按鈕


Neo4j數(shù)據(jù)庫文件夾


一旦此數(shù)據(jù)庫成功啟動(dòng),通過單擊“http:// localhost:7474”鏈接訪問Neo4j瀏覽器來觀察我們的數(shù)據(jù)。


鏈接


第11步 -在Neo4j數(shù)據(jù)瀏覽器的$ prompt下鍵入以下命令

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

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


單擊“Java”節(jié)點(diǎn)以查看其屬性


查看其屬性

單擊“Scala”節(jié)點(diǎn)以查看其屬性


“Scala”節(jié)點(diǎn)

單擊關(guān)系以查看其屬性


關(guān)系

注意 -

如果我們的Neo4j服務(wù)器通過引用我們新創(chuàng)建的數(shù)據(jù)庫啟動(dòng)和運(yùn)行,那么我們不能執(zhí)行我們的程序,因?yàn)榉?wù)器已經(jīng)鎖定了這個(gè)數(shù)據(jù)庫。

所以當(dāng)我們執(zhí)行我們以前的程序時(shí),我們會(huì)得到一些錯(cuò)誤堆棧跟蹤

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

為了避免這個(gè)問題,首先停止我們的服務(wù)器,然后執(zhí)行程序。

因?yàn)槟J(rèn)情況下Neo4j DB Server一次只接受一個(gè)鎖。 在實(shí)時(shí)應(yīng)用程序中,Ne04J DBA人員將更新數(shù)據(jù)庫屬性以允許一次允許一些數(shù)量的鎖。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)