设置和获取连接属性值

可以采用以下方式之一设置连接属性:

  • 将属性名称和值包括在传递给方法 DriverManager.getConnection() 的连接字符串中。

  • Properties 对象中设置属性,然后将其传递给方法 DriverManager.getConnection()

  • 使用方法 VerticaConnection.setProperty()。使用此方法,您只能更改那些在创建连接后仍可更改的连接属性。

此外,一些标准 JDBC 连接属性在 Connection 界面上具有 getter 和 setter,例如 Connection.setAutoCommit()

在连接时设置属性

创建与 Vertica 的连接时,您可以通过以下方式设置连接属性:

  • 在连接字符串中指定这些属性。

  • 修改传递给 getConnection()Properties 对象。

连接字符串属性

您可以使用用于用户名和密码的相同 URL 参数格式在连接字符串中指定连接属性。例如,以下字符串启用 TLS 连接:

"jdbc:vertica://VerticaHost:5433/db?user=UserName&password=Password&TLSmode=require"

使用 setProperty() 方法设置主机名会替代已在连接字符串中设置的主机名。如果出现这种情况,Vertica 可能无法连接到主机。例如,如果使用以上连接字符串,以下代码会替代 VerticaHost 名称:

Properties props = new Properties();
props.setProperty("dataSource", dataSourceURL);
props.setProperty("database", database);
props.setProperty("user", user);
props.setProperty("password", password);
ps.setProperty("jdbcDriver", jdbcDriver);
props.setProperty("hostName", "NonVertica_host");

但是,如果需要新连接或替代连接,您可以在主机名属性对象中输入有效的主机名。

NonVertica_host 主机名将替代连接字符串中的 VerticaHost 名称。若要避免此问题,请将 props.setProperty("hostName", "NonVertica_host"); 行注释掉:

//props.setProperty("hostName", "NonVertica_host");

属性对象

要使用传递给 getConnection() 调用的 Properties 对象设置连接属性:

  1. 导入 java.util.Properties 类以实例化 Properties 对象。

  2. 使用 put() 方法向对象添加名称-值对。

Properties myProp = new Properties();
myProp.put("user", "ExampleUser");
myProp.put("password", "password123");
myProp.put("LoginTimeout", "35");
Connection conn;
try {
    conn = DriverManager.getConnection(
        "jdbc:vertica://VerticaHost:/ExampleDB", myProp);
} catch (SQLException e) {
    e.printStackTrace();
}

在连接后获取和设置属性

与 Vertica 建立连接后,您可以使用 VerticaConnection 方法 getProperty()setProperty() 分别设置一些连接属性的值。

使用 VerticaConnection.getProperty() 方法,您可以获取部分连接属性的值。使用此方法更改与 Vertica 建立连接后可设置的属性值。

由于这些方法特定于 Vertica,因此您必须使用以下方法之一将 Connection 对象强制转换为 VerticaConnection 接口:

  • Connection 对象导入客户端应用程序。

  • 使用完全限定的引用:com.vertica.jdbc.VerticaConnection

以下示例演示了获取和设置只读属性的值。

import java.sql.*;
import java.util.Properties;
import com.vertica.jdbc.*;

public class SetConnectionProperties {
    public static void main(String[] args) {
        // Note: If your application needs to run under Java 5, you need to
        // load the JDBC driver using Class.forName() here.
        Properties myProp = new Properties();
        myProp.put("user", "ExampleUser");
        myProp.put("password", "password123");
        // Set ReadOnly to true initially
        myProp.put("ReadOnly", "true");
        Connection conn;
        try {
            conn = DriverManager.getConnection(
                            "jdbc:vertica://VerticaHost:5433/ExampleDB",
                            myProp);
            // Show state of the ReadOnly property. This was set at the
            // time the connection was created.
            System.out.println("ReadOnly state: "
                            + ((VerticaConnection) conn).getProperty(
                                            "ReadOnly"));

            // Change it and show it again
            ((VerticaConnection) conn).setProperty("ReadOnly", false);
            System.out.println("ReadOnly state is now: " +
                             ((VerticaConnection) conn).getProperty(
                                             "ReadOnly"));
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

运行以上示例后,将在标准输出上输出以下内容:

ReadOnly state: true
ReadOnly state is now: false