
# 执行业务抛出异常
#### Broken pipe, connection reset by peer
**问题分析**：网络故障，数据库连接超时。
**处理方法**：检查网络状态，修复网络故障，影响数据库连接超时的因素。例如，数据库参数session_timeout。
1. 登录[DWS控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏中，单击"集群 \> 集群列表"。
3. 在集群列表中找到所需要的集群，单击集群名称，进入"集群详情"页面。
4. 单击"参数修改"页签，在"参数列表"中找到"session_timeout"查看超时时间参数。
5. 将session_timeout参数的CN、DN参数值设置为0，关闭超时设置。 
   ![](https://support.huaweicloud.com/trouble-dws/figure/zh-cn_image_0000002146898894.png "点击放大")
   
   
 
#### The column index is out of range
**问题分析**：应用程序获取的结果集和预期不一致，列数不一致。
**处理方法**：检查数据库表定义和查询SQL，对返回结果集做一个正确预期。例如结果集只有3列，取值时传入的index最大为3。
#### SQL包含大量参数导致报错：Tried to send an out-of-range integer as a 2-byte value
**问题分析**：JDBC协议规定，变量总数不能超过32767，即short int最大值。
**处理方法**：
数据查询：建议将大SQL进行拆分，确保每个SQL变量数小于32767。
数据导入：建议分批导入或使用copymanager，参考[CopyManager](https://support.huaweicloud.com/devg-dws/dws_04_0102.html)。
#### 调用存储过程报错 ERROR: cached plan must not change result type
**问题分析**：由于JDBC中使用了PreparedStatement，默认重复执行5次就会缓存plan，在此之后如果有重建表操作（例如修改表定义），再次执行就会报错ERROR: cached plan must not change result type.
**处理方法**：在JDBC连接字符串中指定prepareThreshold=0，不再cache plan。例如：
```
String url = "jdbc:postgresql:// 192.168.0.10:8000/postgres?prepareThreshold=0";
```
#### 使用JDBC执行SQL语句报错 ERROR: insufficient data left in message
**问题分析：**服务端无法处理字符串中的'\\0'字符，'\\0'即数值0x00、UTF编码'\\u0000'的字符串。
**处理方法：**排查客户执行的SQL中是否包含'\\0'字符，去掉特殊字符，可用空格代替。
#### 使用JDBC执行create table as语句报错 ERROR: relation "xx" already exists
**问题分析：**JDBC调用preparedStatement.getParameterMetaData()时会发送P报文，该报文会在数据库中创建表，导致execute执行时报表已存在。
**处理方法：**使用preparedStatement时，建议将CREATE TABLE AS拆开执行或者使用resultSet.getMetaData()。
