使用APOC技术从MYSQL数据库导数据到Neo4j图数据库(JDBC)

  •                                                  Neo4j 数据导入

  • 一、安装与部署Neo4j

                   直接在官网下载安装包安装,解压即可。

  •  

    2.mysql 数据导入neo4j的jar包

    apoc-3.4.0.1-all.jar    mysql-connector-java-8.0.8-dmr.jar

     

  • 3.将对应jar包放在Neo4j的安装目录plugins文件目录里,然后在Neo4j的conf目录里的neo4j.conf文件的最后面加上

    dbms.security.procedures.unrestricted=apoc.*,algo.*

  • apoc.import.file.enabled=true
    apoc.export.file.enabled=true

  • 注意:(APOC jar包要与neo4j版本对应,否则启动Neo4j有可能出现无法连接这种情况                                                                         我这里用到的Neo4j版本为3.4.6  APOC为3.4.0                                                                                                                                    本人曾经在Neo4j-3.5.0版本plugins文件目录里 添加APOC-3.4版本,出现启动Neo4j无法连接这种情况  )

  • 4.程序:

  • package com.dataexa.neo4j.test;
    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 Connect {
        public static void main(String[] args) {
            Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "root"));
            Session session = driver.session();
            String cypher = "create constraint on (n:ITEM) ASSERT n.itemid is unique"; //创建唯一索引,这样可以更快的导入数据
            session.run(cypher);
            cypher = "CALL apoc.load.jdbc(\n" +
                    "  'jdbc:mysql://localhost/abc(数据库名)?user=root(数据库的登录用户)&password=root(数据库登录密码)&useUnicode=true&characterEncoding=utf8',\n" +
                    "  'select * from yntest(表名)'\n" +
                    ") YIELD row\n" +
                    "CREATE (:People { cardNo :row.cardNo,name : row.name,sex : row.sex," +
                    "birthday : row.birthday,phone : row.phone})" +
                    "CREATE (:People1 { cardNo1 : row.cardNo1,name1 : row.name1," +
                    "sex1 : row.sex1,birthday1 : row.birthday1,phone1 : row.phone1})" +
                    "CREATE (:People)-[r:relation{edge:'铁路同行',txcs:row.txcs}]->(People1)";
    ///"CREATE (:People { cardNo :row.cardNo,name : row.name,sex : row.sex," + "birthday : row.birthday,phone : row.phone})" + "CREATE (:People1 { cardNo1 : row.cardNo1,name1 : row.name1," + "sex1 : row.sex1,birthday1 : row.birthday1,phone1 : row.phone1})" + "CREATE (:People)-[r:relation{edge:'铁路同行',txcs:row.txcs}]->(People1)";
    //以上是mysql中的表开头字段
            session.run(cypher);
            session.close();
            driver.close();
        }
    }
    
### 使用 APOC 库将 MySQL 数据入到 Neo4j 图数据库 #### 准备工作 确保安装并配置好 Neo4jMySQL。下载适合 Neo4j 版本的 `apoc` 插件以及 `mysql-connector-java` 驱动程序[^2]。 对于 Neo4j 3.4.6 版本,应使用对应的 APOC 3.4.0.1 版本以避免兼容性问题致的服务不可用情况发生[^3]。 #### 创建连接字符串 定义用于访问 MySQLJDBC 连接 URL、用户名和密码: ```cypher CALL apoc.config.set('apoc.jdbc.url', 'jdbc:mysql://localhost:3306/your_database?user=your_user&password=your_password') ``` 此命令设置全局参数来简化后续调用中的连接信息输入[^1]。 #### 加载表结构至节点与关系模式 假设有一个名为 `users` 的表格,其中包含字段 id, name, age;另一个关联表叫作 friendships 表示用户之间的友谊关系,则可以通过如下方式创建相应的图模型: ```cypher // 清除已有数据 (仅限测试环境) MATCH (n) DETACH DELETE n; // 将 users 表转换成节点 CALL apoc.load.jdbc("SELECT * FROM users", "users") YIELD row AS userRecord CREATE (:User { userId: toInteger(userRecord.id), userName: userRecord.name, userAge :toInteger(userRecord.age) }); // 建立 friendship 关系 CALL apoc.load.jdbc("SELECT from_id,to_id FROM friendships", "friendships") YIELD row as friendPair WITH friendPair.from_id AS sourceId, friendPair.to_id AS targetId MATCH (source: User {userId: toInteger(sourceId)}), (target: User {userId: toInteger(targetId)}) MERGE (source)-[:FRIEND]->(target); ``` 上述脚本首先清除了现有数据(适用于开发环境中),接着通过两次 SQL 查询分别构建了代表用户的节点集及其间的社交联系边集合。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值