2012-09-13 75 views
-1

我正在嘗試在OrientDB中存儲三元組作爲我正在使用的Java應用程序內部的Vertex-Edge-Vertex關係。我使用OrientDB的理解是,我可以使用TinkerPop有關API和實例化一個像這樣的圖表:OrientDB - 從Java應用程序中存儲數據的問題

OrientGraph graph = new OrientGraph("local:/tmp/orient/test_db"); 

這真的是我做的實例圖,然後我嘗試用邊頂點連接在這樣一個循環此:(注意,一個Statement是由主題關係對象的三重態。)

for (Statement s : statements) { 

    Vertex a = graph.addVertex(null); 
    Vertex b = graph.addVertex(null); 
    a.setProperty("Subject", s.getSubject().toBELShortForm()); 
    RelationshipType r = s.getRelationshipType(); 
    if (s.getObject() != null) { 
     b.setProperty("Object", s.getObject().toBELShortForm()); 
     Edge e = graph.addEdge(null, a, b, r.toString()); 
    } 
    else { 
     b.setProperty("Object", "null"); 
     Edge e = graph.addEdge(null, a, b, "no-relationship"); 
    } 

} 

我然後依次通過圖的和頂點打印出來這樣的:

for (Vertex v : graph.getVertices()) { 
    out.println("Vertex: " +v.toString()); 
} 

它確實打印了很多頂點,但是當我通過命令行登錄服務器時,使用server.sh,我看到的全部是ORole的3條記錄和OUser的4條記錄。我在這裏錯過了什麼?因爲它看起來像我的Java程序運行並完成,但數據不會被放入數據庫。

+0

爲什麼這個被降票? – Houdini

回答

1

至少現在,答案似乎不是直接使用Tinkerpop API,而是使用Orient API。這是我用Tinkerpop做的同樣的事情,但使用OrientDB API。這實際上確實將我的數據存儲到數據庫中:

for (Statement s : statements) { 
      ODocument sNode = db.createVertex(); 
      sNode.field("Subject", s.getSubject().toBELShortForm()); 
      sNode.save(); 

      ODocument oNode = db.createVertex(); 
      if (s.getObject() != null) { 
       oNode.field("Object", s.getObject().toBELShortForm()); 
       oNode.save(); 
      } 
      else { 
       oNode.field("Object", "null"); 
       oNode.save(); 
      } 

      RelationshipType r = s.getRelationshipType(); 
      ODocument edge = db.createEdge(sNode, oNode); 
      if (r != null) { 
       edge.field(r.toString()); 
       edge.save(); 
      } 
      else { 
       edge.field("no relationship"); 
       edge.save(); 
      } 
} 
2

在服務器的數據庫目錄下創建圖。下面的例子假設OrientDB已根據「在/ usr /本地/東方」安裝:

OrientGraph graph = new OrientGraph("local:/usr/local/orient/databases/test_db"); 

當您啓動server.sh你應該找到這個數據庫正確填充。

Lvc @

相關問題