我創建了一個圖形數據庫。有些節點叫做Vertex
,它們的屬性有:attr1:<float-value>
,attr2:<float-value>
等,以及關係,這些屬性被稱爲Padre
,並且具有以下屬性attr1:<float-value>
,attr2:<float-value>
等。現在,我正在編寫一個Java程序,給定兩個Vertex
es(兩個匹配節點ID的整數),檢查它們之間是否存在路徑。如果是,則計算路徑的屬性總和。Neo4j&Java - 如何總結屬性的所有值?
我已經試過與此代碼:
public void res(Session session, int x, int y) {
float z = 0F;
boolean found = false;
while (!found) {
if (x == y) {
StatementResult res = session.run("MATCH (N:Vertex) WHERE N.ID=" + x +" RETURN PROPERTIES(N)");
Record record = res.next();
for (String a: record.get("PROPERTIES(N)").keys()) {
if(a.equals("ID") || a.equals("IdAlbero")) {
continue;
}
Value k = record.get("PROPERTIES(N)").get(a);
z += k.asFloat();
}
found = true;
} else {
StatementResult res = session.run("MATCH (N:Vertex) WHERE N.ID=" + x +" RETURN PROPERTIES(N)");
Record record = res.next();
for (String a: record.get("PROPERTIES(N)").keys()) {
if(a.equals("ID") || a.equals("IdAlbero")) {
continue;
}
Value k = record.get("PROPERTIES(N)").get(a);
z += k.asFloat();
}
res = session.run("MATCH (N:Vertex),(M:Vertex), (N) - [R:Padre] ->(M) WHERE N.ID = " + x + " RETURN PROPERTIES(R)");
record = res.next();
for (String a: record.get("PROPERTIES(R)").keys()) {
if (a.equals("ID") || a.equals("IdAlbero")) {
continue;
}
Value k = record.get("PROPERTIES(R)").get(a);
z += k.asFloat();
}
}
}
System.out.println(z);
}
現在,我有一個錯誤給z += k.asFloat()
聲明。 這是錯誤:
Exception in thread "main" org.neo4j.driver.v1.exceptions.value.Uncoercible: Cannot coerce FLOAT to Java String at org.neo4j.driver.internal.value.ValueAdapter.asString(ValueAdapter.java:84) at Neo4j.res(Neo4j.java:160) at Connessione.connettiti(Connessione.java:27) at Connessione.main(Connessione.java:35).
我該怎麼辦?
確定的屬性被存儲爲花車?看起來至少有一個你試圖轉換爲浮點的屬性存儲爲一個字符串。您可以使用Eclipse/NetBeans/IntelliJ調試器來停止執行異常,並查看它的值。或者,您可以只打印該屬性的名稱('a')並查看哪個屬性導致該異常。 –