HCRM博客

如何有效解决JDBC1153和错误代码303的报错问题?

GaussDB(DWS) 提供了对JDBC 4.0特性支持的JDBC驱动,使得应用程序可以通过标准接口访问数据库,在使用JDBC连接和执行SQL时,经常会遇到各种报错问题,这些报错主要分为连接报错和执行报错两大类,下面将详细分析这两类报错及其解决办法:

连接报错

1、No suitable driver found for

如何有效解决JDBC1153和错误代码303的报错问题?-图1
(图片来源网络,侵权删除)

可能原因:通过JDBC建连时,url格式错误。

解决办法:确保使用正确的驱动文件(如 gsjdbc4.jar)并对应正确的URL格式,gsjdbc4.jar 驱动的 URL 格式应为jdbc:postgresql://host:port/database

2、Check that the hostname and port are correct and that the postmaster is accepting requests

可能原因:通过JDBC建连时,C/S基本网络不通或者建连参数ip/port不正确。

解决办法

客户端ping服务端IP,检查网络是否畅通,如果不通则解决网络问题。

如何有效解决JDBC1153和错误代码303的报错问题?-图2
(图片来源网络,侵权删除)

查看端口是否正确,若不正确则修改为正确的端口。

3、no pg_hba.conf entry for host

可能原因:通过JDBC建连时,未配置数据库侧远程访问通道。

解决办法:检查所连接的CN是否配置远程访问通道,在CN的pg_hba.conf文件中添加应用侧IP访问通道。

4、Connections could not be acquired from the underlying database!

可能原因:通过JDBC建连时,数据库侧远程访问通道未配置对应database。

如何有效解决JDBC1153和错误代码303的报错问题?-图3
(图片来源网络,侵权删除)

解决办法:检查所连接CN上pg_hba.conf中配置的白名单是否有对应database的条目,并修改添加。

5、Invalid username/password, login denied

可能原因:通过JDBC建连时,建连参数username/password不正确。

解决办法:检查用户名密码,将其修改为正确的用户名密码。

6、The authentication type 5 is not supported

可能原因:使用开源驱动时认证方式不匹配报错或密码认证方式不匹配。

解决办法:更换应用侧jdbc驱动为GaussDB(DWS)自带驱动,并将password_encryption_type参数值调整为1,并通过ALTER USER xxxx PASSWORD xxx重置用户密码。

7、none of the server's SASL authentication mechanisms are supported

可能原因:密码策略问题。

解决办法:参考相关文档进行调整。

8、terminating connection due to administrator command

可能原因:会话连接断开。

解决办法:同时排查客户端和服务端的连接断开原因,及是否有超时设置,例如session_timeout等,有则按业务实际情况调整。

9、SSL SYSCALL error: Connection reset by peer

可能原因:LVS虚拟路由器ID路由配置冲突。

解决办法:参考相关文档进行调整。

10、This connection has been closed

可能原因:服务侧CN异常。

解决办法:检查CN进程是否重启;检查CN上活跃会话数是否异常;检查CN日志是否有异常报错。

11、An I/O error occurred while sending to the backend

可能原因:CN进程异常、session超时退出、手动kill session、LVS中virtual router id冲突等。

解决办法:检查CN进程是否重启;检查CN上活跃会话数是否异常;检查CN日志是否有异常报错。

12、No Datanode defined in cluster

可能原因:使用开源驱动指定currentSchema连接低版本GaussDB (DWS)(651及之前)。

解决办法:将开源驱动替换为产品自带的驱动:gsjdbc4.jar。

执行报错

1、“Caused by: java.net.SocketException: 打开的文件过多”

可能原因:连接池用法问题,Java中反复初始化连接池导致连接池里不断的堆积,导致打开文件数过多。

解决办法:正确使用JDBC连接池接口,避免频繁反复创建连接池。

2、Batch entry 0 INSERT INTO

可能原因:没有开启JDBC的批量模式,造成报错的数据不是异常的数据。

解决办法:在JDBC的连接串中设置batchMode=true后问题解决。

3、Unable to interpret the update count in command completion tag:insert

可能原因:使用开源PG的JDBC 8.x版本存在该问题,在9.x版本修复。

解决办法:升级JDBC驱动版本。

4、Communication failure, failed to send session commands or invalid incoming data, error count: 2

可能原因:URL错写成currentSchema=db1?useSSL=false,JDBC将set seARCh_path=jwy_pic?useSSL=false;语句发送到DN,造成报错退出。

解决办法:URL的参数之间的连接使用&,currentSchema=db1&useSSL=false。

5、The column index is out of range

可能原因:应用程序获取的结果集列数和预期不一致;使用setType接口设置nvarchar2类型。

解决办法

应用侧检查数据库查询sql,对返回结果集做正确预期,若结果集只有3列,取值时传入的index最大为3。

升级JDBC驱动到8.2.0以上版本。

通过上述详细的分析和解决方案,可以帮助开发者更好地理解和处理JDBC连接和执行过程中的各种报错问题,希望这些信息能够为大家在实际开发中提供有价值的帮助。

分享:
扫描分享到社交APP
上一篇
下一篇