# Bolt客户端 TuGraph目前兼容了Neo4j的Bolt协议,可以直接使用Neo4j的客户端访问TuGraph。 ## 开启Bolt端口 Bolt端口是默认开启的,默认端口是7687。如果需要修改端口,请在配置文件中自行修改。基于docker方式部署的服务,配置文件在容器内 `/usr/local/etc/lgraph.json`文件中;如果是用rpm包部署的服务,配置文件在服务器的`/usr/local/etc/lgraph.json`。 修改端口后为了使端口生效,需要重启服务,重启服务的具体操作可见[数据库运行](../../5.installation&running/7.tugraph-running.md)。另外,配置文件中的详细配置项,可见[数据库运行](../../5.installation&running/7.tugraph-running.md)中的服务配置章节。 ## 使用示例 添加Maven依赖 ```xml org.neo4j.driver neo4j-java-driver 4.4.2 ``` Client按照如下格式进行实例化: ```java Driver driver = GraphDatabase.driver("bolt://ip:port", AuthTokens.basic("admin", "73@TuGraph")); ``` 常用语句 ```java //通过 driver 对象创建一个 Session,设置会话连接到特定的数据库,用于执行Cypher语句 Session session = driver.session(SessionConfig.forDatabase("default")); //清空图项目,请不要轻易尝试,它会清空你选中的图项目的模型以及数据 session.run("CALL db.dropDB()"); //创建点模型 session.run("CALL db.createVertexLabel('person', 'id' , 'id' ,INT32, false, 'name' ,STRING, false)"); //创建边模型 session.run("CALL db.createEdgeLabel('is_friend','[[\"person\",\"person\"]]')"); //创建索引 session.run("CALL db.addIndex(\"person\", \"name\", false)"); //插入点数据 session.run("create (n1:person {name:'jack',id:1}), (n2:person {name:'lucy',id:2})"); //插入边数据 session.run("match (n1:person {id:1}), (n2:person {id:2}) create (n1)-[r:is_friend]->(n2)"); //查询点和边 Result res = session.run("match (n)-[r]->(m) return n,r,m"); //Parameterized Query String cypherQuery = "MATCH (n1:person {id:$id})-[r]-(n2:person {name:$name}) RETURN n1, r, n2"; Result result1 = session.run(cypherQuery, parameters("id", 1, "name", "lucy")); while (result1.hasNext()) { Record record = result1.next(); System.out.println("n1: " + record.get("n1").asMap()); System.out.println("r: " + record.get("r").asMap()); System.out.println("n2: " + record.get("n2").asMap()); } //删除点数据 session.run("match (n1:person {id:1}) delete n1"); //删除边数据 session.run("match (n1:person {id:1})-[r]-(n2:person{id:2}) delete r"); //删除边模型 session.run("CALL db.deleteLabel('edge', 'is_friend')"); //删除点模型 session.run("CALL db.deleteLabel('vertex', 'person')"); ``` 详细Cypher和存储过程的使用可见[Cypher](../../8.query/1.cypher.md) ## Neo4j客户端使用限制 目前,我们的系统尚未全面兼容Neo4j Bolt协议的所有高级特性。特别地,对于Neo4j客户端所具备的即时事务处理功能及弱schema灵活性这两项独特能力,当前尚不提供支持。因此,在采用客户端进行操作时,请务必留意规避涉及此类特性的操作,以确保应用的顺畅运行与数据的一致性。 ## 客户端示例 在代码目录中的demo/Bolt下面有Golang、Java、JavaScript、Python、Rust 这几个语言的的例子。想要了解更多可见[客户端示例](https://github.com/TuGraph-family/tugraph-db/tree/master/demo)