如何使用 Cypher 通过 JDBC 连接到 RDBMS
随着 Neo4j 3.x 中包含 Java 存储过程,可以使用 Cypher 通过 JDBC 连接到 RDBMS。为此,需要下载并安装 https://github.com/neo4j-contrib/neo4j-apoc-procedures。
安装 Neo4j APOC 工具包后,下载相应的 RDBMS JDBC 驱动程序 .jar 文件并将其安装到 $NEO4J_HOME\plugins\ 目录下。相应的 JDBC 驱动程序可以从 RDBMS 供应商处获取。例如:
供应商 | 下载位置 | JDBC jar 文件 |
---|---|---|
mysql-connector-java-5.1.34.jar |
||
postgresql-9.4.1209.jar |
||
ojdbc7.jar |
安装 APOC 并将 RDBMS 供应商的 .jar 文件复制到 $NEO4J_HOME\plugins\ 后,重启 Neo4j。
apoc.load.jdbc 存储过程用于通过 JDBC 进行连接,并接受 2 个参数,即:
connection string SQL statement or table
"连接字符串"特定于供应商,因此应查阅 RDBMS 供应商以获取语法。"SQL 语句或表名"例如可以是 'select * from movies' 或简单地 'movies'。使用单个表名将导致 'select * from <表名>'。
以下示例将连接到名为 proddb1 的 mysql 数据库,用户为 root,密码为 football,并从 'movies' 表中选择 studio 列定义为 'MGM Studios' 的所有电影。使用这些数据,我们将在 Neo4j 中为所有符合此条件的电影创建节点,并定义 title 属性。
CALL apoc.load.jdbc('jdbc:mysql://localhost:3306/proddb1?user=root&password=football','select title from movies where studio=\'MGM Studios\'') YIELD row
CREATE (n:Movies {name:row.title})
如果运行上述命令导致类似以下错误消息:
No suitable driver found for jdbc:mysql://localhost:3306/proddb1?user=root&password=football
您可能需要先通过调用以下命令手动加载驱动程序:
call apoc.load.driver('com.mysql.jdbc.Driver')
其中 'com.mysql.jdbc.Driver' 是 MySQL JDBC 驱动程序的类名。
如果您想隐藏/别名连接字符串,可以通过在 conf/neo4j.conf 中添加类似以下参数来实现:
apoc.jdbc.myalias.url=jdbc:mysql://localhost:3306/proddb1?user=root&password=football
现在可以将上述 Cypher 改写为:
CALL apoc.load.jdbc('myalias','select title from movies where studio=\'MGM Studios\'') YIELD row
CREATE (n:Movies {name:row.title})
需要注意的是,apoc.load.jdbc
调用只是提供通过 JDBC 回连接到 RDBMS 的功能。第二个参数可以是任何 SQL 语句,包括可能通过 UPDATE、DROP、TRUNCATE 等修改源数据库的 SQL 语句。如果需要,您可能希望使用只拥有 SELECT 权限的用户连接到 RDBMS。
此外,从 JDBC 加载数据时,请注意数据类型和任何必要的转换;例如,尽管 MySQL 支持原生的 DATE 数据类型,但 Neo4j 不支持。例如,要获取包含 DATE 数据类型的列,在导入到 Neo4j 时将其值转换为字符串。
此页面有帮助吗?