DWS 不同版本支持的JDBC

举报
Jack20 发表于 2025/12/24 19:55:57 2025/12/24
【摘要】 一、先理清 DWS JDBC 驱动基础DWS 有两类 JDBC 驱动(参数支持以专用驱动为准):兼容 PostgreSQL 驱动:基于 PostgreSQL JDBC 驱动修改,参数兼容度高,但功能有限;DWS 专用驱动(推荐):华为自研,全名为gaussdb-dws-jdbc,适配 DWS 各版本特性,参数支持更贴合 DWS 场景。驱动坐标(Maven):<dependency> <...

一、先理清 DWS JDBC 驱动基础

DWS 有两类 JDBC 驱动(参数支持以专用驱动为准):
  1. 兼容 PostgreSQL 驱动:基于 PostgreSQL JDBC 驱动修改,参数兼容度高,但功能有限;
  2. 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);(单位:秒,设置查询超时)

2. 全局超时:通过 DWS 服务端配置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

总结一下下

  1. 核心支持参数:currentSchema(全版本)、ssl/sslmode(8.1+)、applicationName、binaryTransfer 等是 DWS 的高频可用参数;
  2. 不支持参数:connectTimeout/socketTimeout 等超时参数需通过 Java 代码(登录超时 / 查询超时)替代;
  3. 版本适配:8.0 仅基础参数,8.1 + 新增 SSL 安全参数,8.2 + 新增性能调优参数,建议驱动版本与 DWS 服务端版本一致;
  4. 生产建议:必加 ssl=true+sslmode=verify-full(加密)、currentSchema(指定默认 Schema)、applicationName(便于监控)。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。