设置和获取连接属性值
可以采用以下方式之一设置连接属性:
-
将属性名称和值包括在传递给方法
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
对象设置连接属性:
-
导入
java.util.Properties
类以实例化Properties
对象。 -
使用
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();
}
注意
无论属性值的数据类型是哪种,在 Properties 对象中设置的所有值的数据类型均为字符串。在连接后获取和设置属性
与 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