我正在使用Java的Neo4j驱动程序,该驱动程序允许您使用参数运行查询。我有一个动态生成的用作查询的字符串列表, 每个查询具有不同的参数。查询字符串的示例包括:
“创建(一个:人{id:{id},名称:{name}})”
“创建(一个:人{id:{id},姓名:{name}},年龄:{age}})”
“创建(a:人员{id:{id},年龄:{age}})”
对于每个查询,我都需要传递带有适当值的不同参数,以使节点插入正常工作。
下面给出了我要执行的操作的代码段:
try (Transaction tx = session.beginTransaction()) {
String queryStr = "CREATE (a:Person {id:{id}, name:{name}})";
tx.run(query, Values.parameters("id", "testId", "name", "testName"));
}
这段代码适用于非动态生成的键值对属性。就本例而言,我已经将 查询字符串(通常,事务将循环运行,并且将从列表中读取每个查询字符串)。现在,当尝试通过时 参数,我只能使用上面的语法来做到。
例如,语法:
try (Transaction tx = session.beginTransaction()) {
String queryStr = "CREATE (a:Person {id:{id}, name:{name}})";
Map<String, String> parameterKeyValueMap = new HashMap<String, String>();
parameterKeyValueMap.put("id", "id");
parameterKeyValueMap.put("name", "testName");
tx.run(query, Values.parameters(parameterKeyValueMap));
tx.success();
}
不起作用,因为Parameters函数需要偶数个参数。现在,我不确定如何实际进行。显然, Map对象本身也会动态生成(我只是使用了一个简化示例)。
任何帮助/提示将不胜感激!
答案 0 :(得分:2)
您想将Map参数直接传递给run方法(作为第二个参数),而不是依赖Neo4j的Values接口。无需将Map对象转换为Values对象。
答案 1 :(得分:0)
我不知道Neo4j,但是CREATE在JDBC中使用executeUpdate而不是executeQuery,因为这是dB写操作。查询是dB读取操作。