首页 > 解决方案 > 如何编写参数化密码查询?

问题描述

我当前的代码

import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Session;

public class ForStackoverflowQuestion {

    public static void main(String[] args) {


Driver driver = GraphDatabase.driver(
  "bolt://localhost:7687", AuthTokens.basic("neo4j", "12345"));


Session session = driver.session();


String Node1 = "Software_Engineer";
String Node2 = "Programming_Language";
String relationBetweenNode1andNode2 = "LEARNS";


String PersonNameAttribute = "name";
String PersonNameValue = "Jaykant";

String ProgrammingLanguageAttribute = "version";
String ProgrammingLanguageValue = "Neo4j";



String t = "MERGE(n1:"+Node1+"{"+PersonNameAttribute+":\""+PersonNameValue+"\"})"+"-[:"+relationBetweenNode1andNode2+"]->(n2:" + Node2 +" {"+ProgrammingLanguageAttribute+":'"+ProgrammingLanguageValue+"'})";

System.out.println(t);

session.run(t);

session.close();

driver.close();

    }

}

我知道我上面的代码没有使用参数化密码查询;所以它不会在 neo4j 中生成任何查询计划。

为了使用查询计划并从中受益,我需要使用参数化查询。

我的问题 1

如何将这个简单的 Cypher 查询转换为参数化查询以使用存储在变量 (Java) 中的值?

我的问题 2

如果不是 Node1、Node2 和 relationBetweenNode1andNode2 作为参数,那么至少可以将以下值作为参数传递。

 PersonNameAttribute = "name";
 PersonNameValue = "Jaykant";

 ProgrammingLanguageAttribute = "version";
 ProgrammingLanguageValue = "Neo4j";

另一个问题

Create (n:Person{name:{name}})Return n

我想在 neo4j 桌面浏览器中运行上述查询。我怎样才能传递参数值呢?

"params":{"name":"Will Smith"}

标签: performanceneo4jparameterscypherparameter-passing

解决方案


节点和关系类型(Node1、Node2 和 relationBetweenNode1 和Node2)不能作为参数传递,但您可以将以下作为参数传递:

PersonNameAttribute = "name";
PersonNameValue = "Jaykant";

ProgrammingLanguageAttribute = "version";
ProgrammingLanguageValue = "Neo4j";

以上就是这里的回答。

您可以在 Neo4j 浏览器中将参数传递为:

询问:

Create (n:Person{name:{name}})Return n

参数:

:params {"name":"Will Smith"}

推荐阅读