更新时间:2026-07-28 GMT+08:00
分享

连接介绍

在获取驱动jar包并配置JDK环境的情况下,通过JDBC连接数据库时需先加载驱动。本节主要介绍驱动加载方式、连接接口以及连接方式。

驱动加载方式

驱动加载有两种方式:
  • 在代码中创建连接之前的任意位置装载:
    Class.forName("com.huawei.gaussdb.jdbc.Driver");
  • 在JVM启动时通过参数传递,“jdbctest”为测试用例程序的名称:
    java -Djdbc.drivers=com.huawei.gaussdb.jdbc.Driver jdbctest
  • 由于gsjdbc4.jar包与PG的JDBC驱动包类路径一致,若在同一进程内同时使用gsjdbc4.jar包和PG的JDBC驱动包,可能会导致类名冲突。
  • 本版本JDBC不再支持IAM认证功能。
  • GaussDB JDBC驱动主要提供以下增强特性:
    • 支持SHA256登录。
    • 支持SM3登录,需自行配置SM3加密所需插件。例如JDK8,可按下列示例在pom.xml中配置。
      <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk18on</artifactId>
      <version>1.75</version>
      <scope>compile</scope>
      </dependency>
    • 支持对接实现SLF4J接口的第三方日志框架。
    • 支持连接级别的分布式负载均衡。
    • 支持容灾切换。

连接接口

JDBC提供了三种接口,用于创建数据库连接,请参见表1
表1 数据库连接接口

三种接口

方法签名

在非透明多写特性下的相关描述

接口一

DriverManager.getConnection(String url)

此方式需在url中写入数据库用户名和密码,存在安全风险,因此不推荐使用。

接口二

DriverManager.getConnection(String url, String user, String password)

数据库用户名和密码单独传参,具体请参见采用接口二连接数据库(非透明多写)

接口三

DriverManager.getConnection(String url, Properties info)

数据库用户名和密码通过info传参,具体请参见采用接口三连接数据库(非透明多写)

关于url、info、user、password参数的描述,请参见表2

表2 数据库连接参数

参数

描述

url

使用gaussdbjdbc.jar驱动包连接数据库时的连接描述符。

host为服务器名称或IPv4时,格式如下:

  • jdbc:gaussdb:
  • jdbc:gaussdb:database
  • jdbc:gaussdb://host/database
  • jdbc:gaussdb://host:port/database
  • jdbc:gaussdb://host:port/database?param1=value1&param2=value2
  • jdbc:gaussdb://host1:port1,host2:port2/database?param1=value1&param2=value2

host为IPv6时,格式如下:

  • jdbc:gaussdb:
  • jdbc:gaussdb:database
  • jdbc:gaussdb://host/database或jdbc:gaussdb://[host]/database
  • jdbc:gaussdb://[host]:port/database
  • jdbc:gaussdb://[host]:port/database?param1=value1&param2=value2
  • jdbc:gaussdb://[host1]:port1,[host2]:port2/database?param1=value1&param2=value2
说明:
  • database为要连接的数据库名称。数据库名称缺省则与用户名一致。
  • host在非透明多写特性下为数据库服务器名称或IP地址。同时支持IPv4和IPv6。

    在非透明多写特性下,由于安全原因,数据库CN禁止集群内部其他节点无认证接入。如果要在集群内部访问CN,请将JDBC程序部署在CN所在机器,host使用"127.0.0.1"。否则可能会上报“FATAL: Forbid remote connection with trust method!”错误。

    建议业务系统单独部署在集群外部,否则可能会影响数据库运行性能。

    缺省情况下,连接服务器为localhost。

  • port在非透明多写特性下为数据库服务器端口。

    缺省情况下,会尝试连接5432端口。

  • 当host为IPv6且在url中指定port时,需要通过“[]”分隔IP,如:[IP]:port。
  • param为参数名称,即数据库连接属性。参数可以配置在url中,以“?”开始配置,使用“=”给参数赋值,使用“&”分隔不同参数。
  • value为参数值,即数据库连接属性值。
  • 连接时需配置connectTimeout、socketTimeout,如果未配置,默认为0,即不会超时。在服务端与客户端出现网络故障时,客户端一直未收到服务端ACK确认报文,会启动超时重传机制,不断地进行重传。当重传次数达到默认的15次会报超时错误,会导致RTO很高。
  • 使用JDBC标准接口建立连接时,请确保url格式的合法性。若url格式不合法,会导致连接失败,且报错信息中包含原始url字符串,可能造成敏感信息泄露。
  • url中不推荐配置密码、凭证等敏感信息,建议通过Properties连接属性来设置敏感信息,详细操作请参见采用接口三连接数据库(非透明多写)

info

数据库连接属性。全量参数请参见连接参数参考

须知:

url和info同时指定一个参数时,url传入的参数优先生效。

user

数据库用户名。

password

数据库用户的密码。

连接方式介绍

连接数据库的方式通常根据安全性、性能、可扩展性和实现复杂度等因素进行选择。各种连接方式的优缺点,如表3所示。

表3 连接方式介绍

连接方式

优点

缺点

选择原则

非加密方式

  • 简单易实现,无需额外的加密和解密操作。
  • 性能较高,因为不需要进行加密/解密操作,减少了数据传输的开销。
  • 安全性较低,数据在传输过程中容易被窃听或篡改。
  • 不适合传输敏感信息,可能违反隐私保护法规。

只适用于内部网络或对安全性要求不高的场景。

SSL方式

  • 提供了加密传输,数据在传输过程中得到保护,安全性较高。
  • 支持客户端/服务器身份验证,增强了安全性。
  • 配置和管理相对复杂,需要证书的颁发和更新。
  • 在加密和解密大量数据时,可能会增加一些性能开销。

适用于对数据传输安全性要求较高的场景,如金融、医疗等行业。

UDS方式

  • 适用于本地通信,不经过网络,传输速度快。
  • 不需要额外的网络开销,不容易受到网络攻击。
  • 仅限于在同一台主机上的进程间通信,无法用于远程连接。

适用于本地通信的场景,如本地服务和应用之间的数据交换。

国密TLS方式

  • 支持国密算法,符合国内对加密算法的法律要求。
  • 提供了与标准TLS相当的安全性,适用于对加密标准有特殊要求的场景。
  • 在国际范围内的应用可能受限,因为其他国家可能不支持国密算法。
  • 可能存在性能开销,因为国密算法相对于传统的加密算法可能更为复杂。

适用于国内的特定行业,如金融等领域,对国内加密标准有法律要求的场景。

建立连接的首包介绍

驱动与数据库建立连接过程中,Socket(套接字)建立之后,由驱动以key value形式向数据库发送的第一个报文为首包。首包内容包括用户名(user)、数据库名(database)以及部分GUC参数信息(client_encoding、DateStyle、application_name、TimeZone、extra_float_digits、gaussdb.capacity_version、replication、search_path、enable_full_encryption、session_type、uppercase_attribute_name)。GUC参数的具体介绍,请参见《参考》中“数据库运行参数说明 > GUC参数说明”。

  • gaussdb.capacity_version参数表示驱动支持的兼容性能力集的版本号,用于驱动与数据库协商此次建立连接时使用的兼容性特性集合。该参数为内部参数。
  • 数据库执行以下命令后,上述首包GUC参数的值将被更改为首包设置的值。
    reset all;

相关文档