2014-03-24 31 views
2

任何人都可以提供一些如何通过Java连接和查询远程neo4j服务器的示例代码吗?我不是在寻找一个嵌入式neo4j服务器实现。通过Java查询远程neo4j服务器

这里是一个试图得到这个工作:

import org.neo4j.cypher.javacompat.ExecutionEngine; 
import org.neo4j.cypher.javacompat.ExecutionResult; 
import org.neo4j.graphdb.GraphDatabaseService; 
import org.neo4j.rest.graphdb.RestGraphDatabase; 

public static void main(String[] args) { 
     GraphDatabaseService neo4j = new RestGraphDatabase("neo4jurl"); 
     ExecutionEngine engine = new ExecutionEngine(neo4j); 
     String myCypher = "MATCH n WHERE n.symptom = 'Xanthelasma'"; 
     ExecutionResult result = engine.execute(myCypher); 
     System.out.println(result.toString()); 
    } 

这导致了这个:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/filter/ClientFilter 
    at org.neo4j.rest.graphdb.ExecutingRestAPI.createRestRequest(ExecutingRestAPI.java:82) 
    at org.neo4j.rest.graphdb.ExecutingRestAPI.<init>(ExecutingRestAPI.java:73) 
    at org.neo4j.rest.graphdb.RestAPIFacade.<init>(RestAPIFacade.java:294) 
    at org.neo4j.rest.graphdb.RestGraphDatabase.<init>(RestGraphDatabase.java:51) 
    at mapreduce.NetworkAnalysis.main(NetworkAnalysis.java:20) 
Caused by: java.lang.ClassNotFoundException: com.sun.jersey.api.client.filter.ClientFilter 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 5 more 

我也试图实现这种用球衣:

String baseURI = new String("neo4jurl"); 
String payload = "db/data/node/5/relationships/all/CO_SYM"; 
Client client = ClientBuilder.newClient(); 
WebTarget target = client.target(baseURI + payload); 
System.out.println(target.getUri()); 
Invocation.Builder invocationBuilder = target.request(); 
Response response = invocationBuilder.get(); 
System.out.println(response.getStatus()); 
System.out.println(response.readEntity(String.class)); 

这不会返回来自neo4j的数据,但它是html格式的,我想利用密码查询语言。

+0

请发布您的尝试解决问题,一些研究,东西。 SO不是代码写入服务。 – BradleyDotNET

+0

感谢主,我已经更新了这个问题。 – bscolaro

+1

感谢您的更新。你的编辑将大大帮助下一个人看这个问题。 – BradleyDotNET

回答

2

不要这样做!

使用

CypherQueryEngine cypher = new RestCypherQueryEngine(restGraphDB.getRestAPI()); 
cypher.query(statement, params); 

对于你的第二个例子,你的基地-URI是错误的。您还必须添加content-typeaccept标题为application/json

+1

你能解释为什么他不应该使用'RestGraphDatabase'吗?因为这是我在其他论坛上阅读的方法。 – Pega88