更新时间:2024-11-01 GMT+08:00
分享

以非加密方式连接

JDBC以非加密方式连接数据库,首先要加载驱动,然后再创建数据库连接。因此本章节主要介绍加载驱动方式、创建数据库连接的接口、采用不同接口进行非加密连接。

加载驱动方式介绍

加载驱动有两种方式:
  • 在代码中创建连接之前任意位置隐含装载:
    Class.forName("com.huawei.opengauss.jdbc.Driver");
  • 在JVM启动时参数传递,jdbctest为测试用例程序的名称。
    java -Djdbc.drivers=com.huawei.opengauss.jdbc.Driver jdbctest
    1. 由于GaussDB在JDBC的使用上与PG的使用方法保持兼容,所以同时在同一进程内使用两个JDBC驱动的时候,可能会类名冲突。
    2. 相比于PG驱动,GaussDB JDBC驱动主要做了以下特性的增强:
      1. 支持SHA256加密方式登录。
      2. 支持对接实现sf4j接口的第三方日志框架。
      3. 支持容灾切换。

创建数据库连接的接口介绍

JDBC提供了三种接口,用于创建数据库连接。url、info、user、password参数描述,请参见表1

接口一:DriverManager.getConnection(String url)。该方式需要把数据库用户名、密码写在url中,有一定的安全风险,因此不推荐使用。

接口二:DriverManager.getConnection(String url, String user, String password)。具体请参见采用接口二连接数据库

接口三:DriverManager.getConnection(String url, Properties info)。具体请参见采用接口三连接数据库

表1 数据库连接参数

参数

描述

url

opengaussjdbc.jar数据库连接描述符。格式如下:

  • jdbc:opengauss:database
  • jdbc:opengauss://host/database
  • jdbc:opengauss://host:port/database
  • jdbc:opengauss://host:port/database?param1=value1&param2=value2
  • jdbc:opengauss://host1:port1,host2:port2/database?param1=value1&param2=value2
说明:
  • database为要连接的数据库名称。
  • host为数据库服务器名称或IP地址。

    由于安全原因,数据库主节点禁止数据库内部其他节点无认证接入。如果要在数据库内部访问数据库主节点,请将JDBC程序部署在数据库主节点所在机器,host使用“127.0.0.1”。否则可能会出现“FATAL: Forbid remote connection with trust method!”错误。

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

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

  • port为数据库服务器端口。

    缺省情况下,会尝试连接到5431端口的database。

  • param为参数名称,即数据库连接属性。

    参数可以配置在URL中,以“?”开始配置,以“=”给参数赋值,以“&”作为不同参数的间隔。

  • value为参数值,即数据库连接属性值。
  • 连接时需配置connectTimeout,socketTimeout,如果未配置,默认为0,即不会超时。在DN与客户端出现网络故障时,客户端一直未收到DN侧ACK确认报文,会启动超时重传机制,不断地进行重传。当重传次数达到默认的15次后才会报超时错误,会导致RTO时间很高。
  • 建议使用JDBC标准接口建立连接时,确保url格式的合法性,不合法的url会导致异常,且异常中包含原始url字符串,可能造成敏感信息泄漏。

info

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

user

数据库用户名。

password

数据库用户的密码。

采用接口二连接数据库

使用DriverManager.getConnection(String url, String user, String password)接口创建数据库连接,命令如下:

  1. 导入java.sql.Connection和java.sql.DriverManager。

    java.sql.Connection是数据库连接接口,通过java.sql.DriverManager的 getConnection() 方法让应用程序连接到数据库。此外,用户需要根据实际的应用场景,再导入其他的接口和类,具体请参见JDBC接口参考
    1
    2
    import java.sql.Connection;
    import java.sql.DriverManager;
    

  2. 指定数据库sourceURL($ip、$port、database需要用户自行修改)、用户名和密码。

    用户名和密码直接写到代码中有很大的安全风险,建议在环境变量中存放。
    String sourceURL = "jdbc:opengauss://$ip:$port/database";
    String userName = System.getenv("EXAMPLE_USERNAME_ENV");
    String password = System.getenv("EXAMPLE_PASSWORD_ENV");

  3. 加载驱动。

    1. 在代码运行工具(如IDE)中添加opengaussjdbc.jar包。
    2. 执行以下命令加载数据库驱动程序“com.huawei.opengauss.jdbc.Driver”。
      String driver = "com.huawei.opengauss.jdbc.Driver";
      Class.forName(driver);

  4. 创建数据库连接。

    调用DriverManager.getConnection(String url, String user, String password),进行数据库连接。
    Connection conn = DriverManager.getConnection(sourceURL, userName, password);

采用接口三连接数据库

使用DriverManager.getConnection(String url, Properties info)接口创建数据库连接,命令如下:

  1. 导入java.sql.Connection、java.sql.DriverManager、java.util.Properties。

    java.util.Properties的setProperty() 方法,用于设置Properties 对象的属性值。此外,用户需要根据实际的应用场景,再导入其他的接口和类,具体请参见JDBC接口参考
    1
    2
    3
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.Properties;
    

  2. 指定数据库sourceURL($ip、$port、database需要用户自行修改)、用户名和密码。

    用户名和密码直接写到代码中有很大的安全风险,建议在环境变量中存放。
    String sourceURL = "jdbc:opengauss://$ip:$port/database";
    String userName = System.getenv("EXAMPLE_USERNAME_ENV");
    String password = System.getenv("EXAMPLE_PASSWORD_ENV");

  3. 创建Properties 对象,并将userName和password设置为该对象的属性值。

    Properties info = new Properties();
    info.setProperty("user", userName);
    info.setProperty("password", password);

  4. 加载驱动。

    1. 在代码运行工具(如IDE)中添加opengaussjdbc.jar包。
    2. 执行以下命令加载数据库驱动程序“com.huawei.opengauss.jdbc.Driver”。
    String driver = "com.huawei.opengauss.jdbc.Driver";
    Class.forName(driver);

  5. 创建数据库连接。

    调用DriverManager.getConnection(String url, Properties info),进行数据库连接。
    1
    Connection conn = DriverManager.getConnection(sourceURL, info);
    

相关文档