neo4j - Neo4j 使用 neo4j-jdbc 删除节点属性
问题描述
我有几个属性的优势。我想保持优势,但只删除 name 属性。
我的 java Cypher 是这样的:
public static final String DELETE_EDGE_PROPERTY_QUERY = //
"MATCH ()-[r]->() where id(r) = {1} REMOVE r.{2} RETURN r"; //
它适用于密码控制台,但不适用于 jdbc。
我收到了这个错误:
处理失败;嵌套异常是 org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; SQL [MATCH ()-[r]->() 的未分类 SQLException 其中 id(r) = {1} REMOVE r.{2} RETURN r]; SQL 状态 [null]; 错误代码[0];发生一些错误:[Neo.ClientError.Statement.SyntaxError]:Invalid input '{': expected an identifier, whitespace, a function name or a property key name (line 1, column 45 (offset: 44)) "MATCH () -[r]->() where id(r) = {1} REMOVE r.{2} RETURN r" `
有什么建议么?
谢谢
编辑
我无法使用 jdbc 模板。所以我使用了字符串替换:将属性设置为 NULL 将删除该属性(http://www.baeldung.com/java-neo4j)
解决方案:Java:
String deleteQuery = String.format(DELETE_EDGE_PROPERTY_QUERY, property);
plantJdbcTemplate.update(deleteQuery, edgeId);
密码:
public static final String DELETE_EDGE_PROPERTY_QUERY = //
"MATCH ()-[r]->() where id(r) = {1} SET r.%s = NULL RETURN r";
解决方案
这不是neo4j-jdbc
问题,它与 Neo4j 关于参数化查询的设计有关。
在查询中,您可以参数化您想要的所有数据,除了:
- 标签
- 关系类型
- 特性
如果你想在 Cypher 中做,APOC 插件中有很多助手。
推荐阅读
- android - Android点击更改按钮参数然后重置
- powershell - 如何替换管道内的字符串?
- python - 多处理值挂起并锁定
- c - 从机器的角度理解汇编程序中的指针
- javascript - Expressjs 在 6 点后停止处理请求,然后在经过大量时间后恢复
- php - 如何在 localhost 上触发 Laravel SQLSTATE 错误?
- php - 如何自动填充现有分类术语的描述?
- python - 在 Jupyter 笔记本中出现以下错误。不确定问题是否与 collect() 或任何兼容性问题有关
- python-3.x - (psycopg2.OperationalError) FATAL: 数据库系统正在启动,docker + redis + celery
- javascript - 如何使用javascript查询数据库并将值放入数组