Arrow Flight SQL JDBC 驱动程序#
Flight SQL JDBC 驱动程序是一个 JDBC 驱动程序实现,它底层使用 Flight SQL 协议。该驱动程序可以与任何实现 Flight SQL 的数据库一起使用。
安装和要求#
该驱动程序兼容 JDK 11+。请注意,以下 JVM 参数是必需的
java --add-opens=java.base/java.nio=ALL-UNNAMED ...
要通过 Maven 添加依赖项,请使用如下所示的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<arrow.version>18.1.0</arrow.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.arrow</groupId>
<artifactId>flight-sql-jdbc-driver</artifactId>
<version>${arrow.version}</version>
</dependency>
</dependencies>
</project>
连接到数据库#
URI 格式如下
jdbc:arrow-flight-sql://HOSTNAME:PORT[/?param1=val1¶m2=val2&...]
例如,使用以下 URI
jdbc:arrow-flight-sql://127.0.0.1:12345/?username=admin&password=pass&useEncryption=1
这将连接到运行在 localhost
的 12345 端口上的 Flight SQL 服务。它将创建一个安全的加密连接,并使用用户名 admin
和密码 pass
进行身份验证。
URI 的组成部分如下。
URI 方案必须是
jdbc:arrow-flight-sql://
。**主机名** 是 Flight SQL 服务的主机名。
**端口** 是 Flight SQL 服务的端口。
其他选项可以作为查询参数传递。参数名称区分大小写。支持的参数有
参数 |
默认值 |
描述 |
---|---|---|
disableCertificateVerification(禁用证书验证) |
false |
启用 TLS 时,是否验证服务器证书 |
password(密码) |
null |
用户/密码身份验证的密码 |
threadPoolSize (线程池大小) |
1 |
内部线程池的大小 |
token(令牌) |
null |
用于令牌身份验证的令牌 |
trustStore(信任存储) |
null |
启用 TLS 时,证书存储的路径 |
trustStorePassword (信任存储密码) |
null |
启用 TLS 时,证书存储的密码 |
tlsRootCerts (TLS 根证书) |
null |
TLS 的 PEM 编码根证书的路径 - 使用它作为 |
clientCertificate (客户端证书) |
null |
当 Flight SQL 服务器需要客户端验证时,PEM 编码的客户端 mTLS 证书的路径。 |
clientKey (客户端密钥) |
null |
当 Flight SQL 服务器需要客户端验证时,PEM 编码的客户端 mTLS 密钥的路径。 |
useEncryption(使用加密) |
true |
是否使用 TLS(默认是加密连接) |
user(用户) |
null |
用户/密码身份验证的用户名 |
useSystemTrustStore (使用系统信任存储) |
true |
启用 TLS 时,是否使用系统证书存储 |
retainCookies (保留 Cookie) |
true |
从单独的端点检索流时,是否在后续内部连接中使用初始连接中的 Cookie。 |
retainAuth (保留身份验证) |
true |
从单独的端点检索流时,是否在用于检索流的后续内部连接中使用从初始连接获得的 Bearer 令牌。 |
请注意,如果 URI 值包含 !、@、$ 等字符,则必须对它们进行 URI 编码。
驱动程序未处理的任何 URI 参数都将作为 gRPC 标头传递给 Flight SQL 服务。例如,以下 URI
jdbc:arrow-flight-sql://127.0.0.1:12345/?useEncryption=0&database=mydb
这将连接到运行在 localhost
的 12345 端口上的 Flight SQL 服务,无需身份验证或加密。每个请求还将包含一个 database=mydb
gRPC 标头。
使用 JDBC 驱动程序管理器进行连接时,也可以使用 Properties 对象提供连接参数。使用 Properties 对象提供时,值*不应进行 URI 编码。*
URI 指定的参数优先于 Properties 对象提供的参数。调用 DriverManager#getConnection() 的用户/密码重载 时,URI 上提供的用户名和密码优先于函数调用的用户名和密码参数。