DWS 不同版本支持的JDBC
【摘要】 一、先理清 DWS JDBC 驱动基础DWS 有两类 JDBC 驱动(参数支持以专用驱动为准):兼容 PostgreSQL 驱动:基于 PostgreSQL JDBC 驱动修改,参数兼容度高,但功能有限;DWS 专用驱动(推荐):华为自研,全名为gaussdb-dws-jdbc,适配 DWS 各版本特性,参数支持更贴合 DWS 场景。驱动坐标(Maven):<dependency> <...
一、先理清 DWS JDBC 驱动基础
DWS 有两类 JDBC 驱动(参数支持以专用驱动为准):
- 兼容 PostgreSQL 驱动:基于 PostgreSQL JDBC 驱动修改,参数兼容度高,但功能有限;
- DWS 专用驱动(推荐):华为自研,全名为
gaussdb-dws-jdbc,适配 DWS 各版本特性,参数支持更贴合 DWS 场景。
驱动坐标(Maven):
<dependency>
<groupId>com.huaweicloud.dws</groupId>
<artifactId>gaussdb-dws-jdbc</artifactId>
<version>8.2.0</version> <!-- 匹配DWS服务端版本,如8.1/8.2/9.0 -->
</dependency>
二、DWS 各版本支持的 JDBC URL 连接参数
DWS 的参数支持随版本迭代逐步扩展,核心参数全版本兼容,新增参数主要集中在 8.1 + 版本。以下是按 “必选 / 常用 / 进阶” 分类的支持参数,标注版本适配性:
1. 核心基础参数(所有 DWS 版本支持)
这类参数是 DWS 连接的必备 / 高频配置,和业务直接相关:
| 参数名 | 取值 / 格式 | 作用说明 | 示例 |
|---|---|---|---|
| user | 字符串(数据库用户名) | 必选,DWS 数据库登录用户名 | user=dbadmin |
| password | 字符串(数据库密码) | 必选,DWS 数据库登录密码 | password=Admin@123 |
| currentSchema | 字符串(Schema 名称) | 核心!指定默认 Schema,替代SET search_path TO xxx,和你示例中的用法一致 |
currentSchema=test |
| applicationName | 字符串(应用标识) | 设置连接的应用名称,用于 DWS 控制台监控连接来源,排查问题 | applicationName=springboot-app |
| readOnly | true/false | 设置连接是否为只读模式,只读连接无法执行 DML/DDL | readOnly=true |
| binaryTransfer | true/false | 是否启用二进制数据传输(如 bytea 类型),开启可提升大数据传输性能 | binaryTransfer=true |
| prepareThreshold | 整数(默认 5) | 预处理语句(PreparedStatement)的缓存阈值,超过阈值则缓存执行计划 | prepareThreshold=10 |
2. 安全相关参数(DWS 8.1.x 及以上支持)
DWS 对安全参数的支持从 8.1 版本开始完善,主要用于 SSL 加密连接:
| 参数名 | 取值 / 格式 | 作用说明 | 示例 |
|---|---|---|---|
| ssl | true/false | 是否启用 SSL 加密连接(DWS 生产环境强制要求) | ssl=true |
| sslmode | disable/allow/prefer/require/verify-ca/verify-full | SSL 连接模式,生产推荐 verify-full(校验服务端证书) | sslmode=verify-full |
| sslrootcert | 字符串(证书路径) | 指定 CA 证书文件路径(配合 sslmode=verify-ca/verify-full 使用) | sslrootcert=/opt/cert/root.crt |
| sslcert | 字符串(客户端证书路径) | 客户端证书路径(双向认证时使用) | sslcert=/opt/cert/client.crt |
3. 编码 / 语法适配参数(DWS 8.1.x 及以上支持)
用于适配 DWS 的字符编码和 SQL 语法特性:
| 参数名 | 取值 / 格式 | 作用说明 | 示例 |
|---|---|---|---|
| stringtype | unspecified/varchar/string | 字符串类型映射规则,指定 Java String 映射为 DWS 的 varchar/string 类型 | stringtype=varchar |
| escapeSyntaxCallMode | literal/call/function | 函数调用语法转义模式,适配 DWS 的自定义函数调用 | escapeSyntaxCallMode=function |
| allowEncodingChanges | true/false | 是否允许连接后修改客户端编码(DWS 默认 UTF8,不建议开启) | allowEncodingChanges=false |
4. 性能调优参数(DWS 8.2.x/9.0.x 及以上支持)
高版本 DWS 新增的性能相关参数,适合大规模数据交互场景:
| 参数名 | 取值 / 格式 | 作用说明 | 示例 |
|---|---|---|---|
| batchMode | true/false | 是否启用批量执行模式,提升批量插入 / 更新性能 | batchMode=true |
| fetchSize | 整数(默认 100) | 设置 ResultSet 的默认.fetchSize,控制一次从服务端拉取的数据量 | fetchSize=500 |
| loglevel | OFF/DEBUG/INFO/WARN/ERROR | 驱动日志级别,用于调试连接 / 执行异常(仅调试用,生产禁用) | loglevel=INFO |
5. DWS 版本参数支持差异表
| DWS 版本 | 核心支持参数 | 新增特性 |
|---|---|---|
| 8.0.x | currentSchema、user、password、applicationName | 仅基础参数,无 SSL 高级配置 |
| 8.1.x | 新增 ssl、sslmode、stringtype | 完善 SSL 加密,基础语法适配 |
| 8.2.x | 新增 escapeSyntaxCallMode、batchMode | 性能调优 + 语法增强 |
| 9.0.x+ | 新增更多监控 / 调优参数 | 适配 DWS MPP 架构的分布式优化 |
三、DWS 不支持的 PostgreSQL 参数
你提到的 connectTimeout、socketTimeout 是开源 PostgreSQL 的常用参数,但 DWS 不支持,这里列出核心不支持参数及实战替代方案:
| 不支持参数 | 开源用途 | DWS 替代方案 |
|---|---|---|
| connectTimeout | 连接建立超时(毫秒) | 通过 Java 代码设置:DriverManager.setLoginTimeout(10);(单位:秒,设置登录超时) |
| socketTimeout | 套接字读写超时(毫秒) | 1. 单语句超时:statement.setQueryTimeout(30);(单位:秒,设置查询超时)
statement_timeout参数 |
| loginTimeout | 登录超时(秒) | 同 connectTimeout,用DriverManager.setLoginTimeout() |
| keepAlive | TCP 保活开关 | DWS 服务端默认开启 TCP 保活,无需客户端配置 |
| tcpKeepAlive | TCP 保活参数 | 同上,由 DWS 服务端管控 |
替代方案示例代码(设置超时):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class DWSJdbcDemo {
public static void main(String[] args) throws Exception {
// 1. 加载DWS驱动
Class.forName("com.huawei.gauss200.jdbc.Driver");
// 2. 设置登录超时(替代connectTimeout,单位:秒)
DriverManager.setLoginTimeout(10);
// 3. 构建DWS JDBC URL(核心参数示例)
String url = "jdbc:postgresql://10.10.0.13:25308/postgres?currentSchema=test&ssl=true&sslmode=verify-full&applicationName=demo-app";
// 4. 建立连接
try (Connection conn = DriverManager.getConnection(url, "dbadmin", "Admin@123")) {
// 5. 设置查询超时(替代socketTimeout,单位:秒)
Statement stmt = conn.createStatement();
stmt.setQueryTimeout(30); // 30秒超时
// 执行SQL
stmt.executeQuery("SELECT * FROM test_table");
}
}
}
四、DWS JDBC URL 完整示例(不同场景)
1. 基础连接(8.0 + 版本)
jdbc:postgresql://10.10.0.13:25308/postgres?currentSchema=test&user=dbadmin&password=Admin@123&applicationName=app1
2. 加密连接(8.1 + 版本,生产环境)
jdbc:postgresql://10.10.0.13:25308/postgres?currentSchema=test&ssl=true&sslmode=verify-full&sslrootcert=/opt/cert/root.crt&user=dbadmin&password=Admin@123
3. 性能优化连接(8.2 + 版本)
jdbc:postgresql://10.10.0.13:25308/postgres?currentSchema=test&binaryTransfer=true&prepareThreshold=20&batchMode=true&user=dbadmin&password=Admin@123
总结一下下
- 核心支持参数:currentSchema(全版本)、ssl/sslmode(8.1+)、applicationName、binaryTransfer 等是 DWS 的高频可用参数;
- 不支持参数:connectTimeout/socketTimeout 等超时参数需通过 Java 代码(登录超时 / 查询超时)替代;
- 版本适配:8.0 仅基础参数,8.1 + 新增 SSL 安全参数,8.2 + 新增性能调优参数,建议驱动版本与 DWS 服务端版本一致;
- 生产建议:必加 ssl=true+sslmode=verify-full(加密)、currentSchema(指定默认 Schema)、applicationName(便于监控)。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)