Optimight
Optimight

Reputation: 3061

How to write Parameterized Cypher Query?

My Current Code

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();

    }

}

I understand that my above code is not using Parameterized Cypher Query; so it will not generate any Query Plan in neo4j.

In order to use and benefit from the Query Plan, I need to use the Parametrized Query.

My Question 1

How can I make this simple Cypher Query into Parameterized Query to use the values stored in variables (Java)?

My Question 2

If not Node1, Node2, and relationBetweenNode1andNode2 as Parameters then at least following values can be passed as parameters.

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

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

Another Question

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

I want to run above query into the neo4j Desktop browser. How can I pass the parameter value along with it?

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

Upvotes: 0

Views: 1071

Answers (1)

Rajendra Kadam
Rajendra Kadam

Reputation: 4052

Node and Relationship types (Node1, Node2, and relationBetweenNode1andNode2) cannot be passed as Parameters, But you can pass following as parameters:

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

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

Above is answered here.

You can pass parameter in the Neo4j Browser as:

Query:

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

Parameters:

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

Upvotes: 2

Related Questions