Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java代码中向密码查询插入字符串参数时出错_Java_Neo4j_Cypher_Graph Databases - Fatal编程技术网

在java代码中向密码查询插入字符串参数时出错

在java代码中向密码查询插入字符串参数时出错,java,neo4j,cypher,graph-databases,Java,Neo4j,Cypher,Graph Databases,我想在Java中向密码查询插入一个字符串参数。下面是我使用的代码,我有一个名为“piyumi”的person节点,我想与活动节点建立关系。活动节点的名称为“行走”。当我执行代码时,我得到http状态代码400。谁能帮我修改cypher查询,这样我就可以插入字符串变量s而不会出错 import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jerse

我想在Java中向密码查询插入一个字符串参数。下面是我使用的代码,我有一个名为“piyumi”的person节点,我想与活动节点建立关系。活动节点的名称为“行走”。当我执行代码时,我得到http状态代码400。谁能帮我修改cypher查询,这样我就可以插入字符串变量s而不会出错

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

import javax.ws.rs.core.MediaType;

public class NeoAPIClass {
    private final String baseUri = "http://localhost:7474/db/data/cypher";
    private final String user = "neo4j";
    private final String password = "12345";

    public static void main(String args[]) throws JSONException {
            NeoAPIClass n=new NeoAPIClass();
            n.runQuery();
    }

    void runQuery() throws JSONException {
        Client client = Client.create();
        client.addFilter(new HTTPBasicAuthFilter(user, password));
        WebResource cypherResource = client.resource(baseUri);


        String s="walking";
        JSONObject obj = new JSONObject();
        obj.put("query", "Match(piyumi : Person{name:\"Piyumi\"}) create (piyumi)-[:doing{timestamp:4789}]->(n:activity) WHERE n.name=s");
        String st = obj.toString();

        ClientResponse cypherResponse = cypherResource.accept(MediaType.APPLICATION_JSON)
                .type(MediaType.APPLICATION_JSON_TYPE).entity(st).post(ClientResponse.class);

        System.out.println("Output from Server .... "+ cypherResponse.getStatus());


    }

}

您的问题是cypher服务器无法从Java代码中看到变量
s
。您需要传递一个本身具有
字符串的密码查询,而不是Java变量的名称

您可以使用
obj.put
将行更改为该行

obj.put("query", "Match(piyumi : Person{name:\"Piyumi\"}) create (piyumi)-[:doing{timestamp:4789}]->(n:activity) WHERE n.name=\"" + s + "\"");

您的问题是cypher服务器无法从Java代码中看到变量
s
。您需要传递一个本身具有
字符串的密码查询,而不是Java变量的名称

您可以使用
obj.put
将行更改为该行

obj.put("query", "Match(piyumi : Person{name:\"Piyumi\"}) create (piyumi)-[:doing{timestamp:4789}]->(n:activity) WHERE n.name=\"" + s + "\"");

尝试检索现有节点时出现问题。 因此,转到并执行下面的查询

匹配(n:活动) 其中n.name=“步行” 创建(piyumi:Person{name:“piyumi”})-[r1:doing{timestamp:4789}]>(n)

如果工作正常,则检索它。 匹配(皮尤米:人)-[r1:做]->(n:活动) 返回r1

所以你的查询代码应该是这样的


“匹配(n:activity)\n其中n.name=\“walking\”\n创建(piyumi:Person{name:\“piyumi\”})-[r1:doing{timestamp:4789}]>(n)”

尝试检索现有节点时出现问题。 因此,转到并执行下面的查询

匹配(n:活动) 其中n.name=“步行” 创建(piyumi:Person{name:“piyumi”})-[r1:doing{timestamp:4789}]>(n)

如果工作正常,则检索它。 匹配(皮尤米:人)-[r1:做]->(n:活动) 返回r1

所以你的查询代码应该是这样的


“匹配(n:activity)\n其中n.name=\“walking\”\n创建(piyumi:Person{name:\“piyumi\”)-[r1:doing{timestamp:4789}]>(n)
不可能将
创建
其中
组合起来。您需要首先匹配人员和活动,然后创建关系

还建议在请求()的单独部分简化传输参数:


无法将
创建
其中
组合起来。您需要首先匹配人员和活动,然后创建关系

还建议在请求()的单独部分简化传输参数:


非常感谢您的快速回复。我将obj.out行替换为您给出的行。但我还是犯了同样的错误。你能帮我进一步解决这个问题吗?这个错误表明cypher服务器无法理解你提供的查询。我不知道为什么,因为我对cypher查询语言不是特别熟悉。cypher服务器是否生成了可能有更有用错误的日志?那么我不知道如何帮助您。您需要一个非常了解cypher的人来查看您的查询。问题在于查询本身,而不是Java程序。对不起,我帮不上什么忙了。无论如何,非常感谢您的快速回复。我将obj.out行替换为您给出的行。但我还是犯了同样的错误。你能帮我进一步解决这个问题吗?这个错误表明cypher服务器无法理解你提供的查询。我不知道为什么,因为我对cypher查询语言不是特别熟悉。cypher服务器是否生成了可能有更有用错误的日志?那么我不知道如何帮助您。您需要一个非常了解cypher的人来查看您的查询。问题在于查询本身,而不是Java程序。对不起,我帮不上什么忙了。无论如何,非常感谢您的快速回复。但我需要一个变量名,而不是“行走”。你能帮我做这个吗。我想把s放在那里。如果这是正确的,那么您可以通过编写
“MATCH(n:activity)\nWHERE n.name=\'+s+“\”\n创建它(piyumi:Person{name:\'piyumi\})-[r1:doing{timestamp:4789}]>(n)
变量“s”已经添加了
obj.put(“查询”,“MATCH(n:activity)\nWHERE n.name=\\\\+s+\n创建它(piyumi:Person{name:\\'piyumi\})-[r1:doing{timestamp:4789}]->(n)”;
这应该可以工作,并给出http状态200非常感谢您的快速响应。但是我需要一个变量名,而不是“walking”。您能帮我吗?我想把s放在那里。如果这是正确的,那么您可以通过编写
“MATCH”(n:activity)来构造它\nWHERE n.name=\\'+s+\'\n创建(piyumi:Person{name:\'piyumi\'})-[r1:doing{timestamp:4789}]->(n)
Variable“s”添加了,
obj.put(“查询”,“匹配(n:activity)\nWHERE n.name=\'+s+“\n创建(piyumi:Person{name:\'piyumi\}-[r1:doing{timestamp:4789]->(n);