Как написать параметризованный шифрованный запрос?

Мой текущий код

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

    }

}

Я понимаю, что мой код выше не использует Parameterized Cypher Query; поэтому он не будет генерировать план запроса в neo4j.

Чтобы использовать план запроса и извлечь из него выгоду, мне нужно использовать параметризованный запрос.

Мой вопрос 1

Как я могу превратить этот простой запрос Cypher в параметризованный запрос, чтобы использовать значения, хранящиеся в переменных (Java)?

Мой вопрос 2

Если не Node1, Node2 и отношениеBetweenNode1andNode2 в качестве параметров, то по крайней мере следующие значения могут быть переданы в качестве параметров.

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

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

Другой вопрос

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

Я хочу запустить вышеуказанный запрос в браузере neo4j Desktop. Как я могу передать значение параметра вместе с ним?

"params":{"name":"Will Smith"}
За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
TL;DR: Angular Signals может облегчить отслеживание всех выражений в представлении (Component или EmbeddedView) и планирование пользовательских...
Sniper-CSS, избегайте неиспользуемых стилей
Sniper-CSS, избегайте неиспользуемых стилей
Это краткое руководство, в котором я хочу поделиться тем, как я перешел от 212 кБ CSS к 32,1 кБ (сокращение кода на 84,91%), по-прежнему используя...
0
0
622
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Типы узла и отношения (узел 1, узел 2 и отношение между узлом 1 и узлом 2) не могут быть переданы в качестве параметров, но вы можете передать в качестве параметров следующие параметры:

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

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

Выше дан ответ здесь.

Вы можете передать параметр в браузере Neo4j как:

Запрос:

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

Параметры:

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

В браузере neo4j я написал: Create (n:Person{name:{name}})Return n :params {"name":"Will Smith"} но он отвечает с ошибкой. Пожалуйста, направляйте.

Optimight 07.04.2019 21:34

Запустите эти два отдельно. Сначала запустите запрос :params, а затем фактический запрос Create.

Rajendra Kadam 08.04.2019 03:44

Сделано успешно. Я последовал совету в вашем комментарии.

Optimight 08.04.2019 07:29

Другие вопросы по теме