
# 不同场景下配置连接参数
![](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
以下示例场景中node代表"host:port"，host为数据库服务器名称或IP地址，port为数据库服务器端口。
#### 容灾场景
某客户有两套数据库实例，其中A数据库实例为生产数据库实例，B数据库实例为容灾数据库实例。当客户执行容灾切换时，A数据库实例将降为容灾数据库实例，B数据库实例将升为生产数据库实例。此时为了避免修改配置文件导致的应用重启或重新发版。客户可在初始配置文件时，即将A、B数据库实例写入连接串中。此时在主数据库实例不可连接时，驱动将尝试对容灾数据库实例建连。例如A数据库实例为{node1,node2,node3}。B数据库实例为{node4,node5,node6}。
则url可参考如下进行配置：
```
jdbc:opengauss://node1,node2,node3,node4,node5,node6/database?priorityServers=3
```
如果想要能连接主数据库实例的同时，可以连接到主数据库实例内的主机，需要同时配置targetServerType=master，url可以参考如下命令进行配置：
```
jdbc:opengauss://node1,node2,node3,node4,node5,node6/database?priorityServers=3&targetServerType=master
```
#### 负载均衡场景
某客户存在一套集中式数据库实例，包含1主2备三个节点{node1,node2,node3}，其中node1为主节点，node2、node3为备节点。
客户希望同一应用程序上建立的连接，较为均匀的分布在三个节点上，则url可参考如下配置：
```
jdbc:opengauss://node1,node2,node3/database?loadBalanceHosts=true
```
![](https://support.huaweicloud.com/centralized-devg-v2-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
使用loadBalanceHosts时，若连接建立在备DN上，将无法执行写操作。如果业务需要执行读写操作，请勿配置该参数。
#### 自动寻主场景
某客户存在一套集中式数据库实例，包含1主2备三个节点{node1,node2,node3}，其中node1为主节点，node2、node3为备节点。
客户希望应用连接能建立在主DN上，并在发生主备切换时，自动选择新的主节点建连，则url可参考如下配置：
```
jdbc:opengauss://node1,node2,node3/database?targetServerType=master
```
#### 日志诊断场景
某客户在使用中出现数据导入慢或出现一些难以分析的异常报错，可通过开启trace日志进行诊断，url可参考如下进行配置。
```
jdbc:opengauss://node1/database?loggerLevel=trace
```
#### 高性能场景
某客户对于相同sql可能多次执行，仅是传参不同，为了提升执行效率，可开启prepareThreshold参数，避免重复生成执行计划，url可参考如下配置。
```
jdbc:opengauss://node1/database?prepareThreshold=5
```
某客户一次查询1000万数据，为避免同时返回造成内存溢出，可使用defaultRowFetchSize，url可参考如下配置。
```
jdbc:opengauss://node1/database?defaultRowFetchSize=50000
```
某客户需要批量插入1000万数据，为提升效率，可使用batchMode，url可参考如下配置。
```
jdbc:opengauss://node1/database?batchMode=on
```
#### 大小写转换场景
在GaussDB中元数据默认存储为小写，如果从元数据默认存储为大写的数据库迁移至GaussDB时，大写的元数据会变为小写。如果原业务中涉及到大写元数据的处理，可以开启uppercaseAttributeName参数，但是不建议通过这种方式来解决问题，建议通过修改业务代码来解决。如果一定要使用，请务必确认当前数据库中的元数据是否全为小写，以避免出现问题。
```
jdbc:opengauss://node1/database?uppercaseAttributeName=true
```
对于DatabaseMetaData中涉及的接口，按照入参直接调用即可，对于ResultSetMetaData中涉及的接口使用方法如下所示：
```
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from test_supper");
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
    System.out.println(rsmd.getColumnLabel(i) + "   " + rsmd.getColumnName(i));
}
```
