nebula-jdbc 文档
前言
这是我在开源之夏 Summer 2021 中负责的项目的文档,目前这个项目已经通过导师和主办方审核顺利结项啦哈哈哈哈哈。中期报告在我前面的博客中,代码已经合并到 vesoft 的 Github 仓库中,源码及文档见此处。
nebula-jdbc 文档
Introduction
nebula-jdbc 是基于 nebula-java 封装的,在其基础上对接了 JDBC 协议,实现 JDBC 的相关接口。比起 nebula-java 你可能更加熟悉 JDBC 的 API,使用 nebula-jdbc 你可以不必熟悉 nebula-java 的 API(熟悉的话会更好,这样你会理解为什么我们连接字符串的格式是为什么与传统的 JDBC 连接字符串不同),像在 java 程序中操作关系型数据库一样操作 Nebula 服务
Architecture
nebula-jdbc 主要的一些类和接口的关系如下:(蓝色实线是类之间的 extends 关系,绿色实线是接口之间的 implements 关系,绿色虚线是抽象类与接口之间的 implements 关系)
用户首先通过 NebulaDriver
注册驱动,其中有 NebulaPool
属性,用于获取 Session
与数据库通信。NebulaDriver
中提供三个构造函数,无参构造函数按照默认参数配置 NebulaPool
,接收一个 Properties
类型参数的构造函数可以自定义 NebulaPool
配置,接收一个 String
类型参数的构造函数可以只指定连接地址,其余参数按照默认配置。
注册驱动后用户可以通过 DriverManager::getConnection(String url)
获取 Connection
。在 NebulaConnection
的构造函数中会通过 NebulaDriver
中的 NebulaPool
获取 Session
接着连接到在 url 中指定的图空间(graphSpace)。
获取到 Connection
后用户可以通过 Connection::createStatement
和 Connection::prepareStatement
拿到 Statement
或者 PreparedStatement
对象,调用其中的 executeQuery、executeUpdate、execute
方法向数据库发送命令,数据库执行此命令后的结果会封装在 NebulaResult
中,再调用其中各种获取数据的方法可以得到不同数据类型的数据。
Usage
1 |
|
Q & A
- 连接字符串"jdbc:nebula://graphSpace"中不用指定连接地址吗?
由于地址列表已经在 NebulaDriver
中配置(默认或自定义),所以连接字符串不需要指定地址,只需要指定图空间。
PreparedStatement
是否有预编译功能?
服务端暂不支持。
executeQuery
、executeUpdate
、execute
的使用场景?
executeQuery
专门用于查询 Nebula 中的数据,此时 nGql 需包含查询关键字 [“match”, “lookup”, “go”, “fetch”, “find”, “subgraph”],返回查询结果 ResultSet
;executeUpdate
用于修改数据,nGql 需包含修改关键字 [“update”, “delete”, “insert”, “upsert”, “create”, “drop”, “alter”, “rebuild”],返回查询结果 0
;execute
用于其他 admin 操作,执行成功则返回查询 true
。
executeUpdate
的返回结果是0,为什么不是受到该语句影响的数据量?
目前服务端没有 updateCount 统计返回给用户。假如用户一条插入语句里面同时插入多个点或者多条边,这里面可能有部分成功,但服务端只会返回告诉用户失败了,但是其实用户可能能查到部分数据。统一返回0给用户。
- 查询语句中返回点、边、路径后在 Result 中应该如何获得?
将 ResultSet
转为 NebulaResultSet
,然后调用 getNode
、getEdge
、getPath
;对于列表、集合、映射也是如此。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!