GaussDB(DWS) 提供了对JDBC 4.0特性支持的JDBC驱动,使得应用程序可以通过标准接口访问数据库,在使用JDBC连接和执行SQL时,经常会遇到各种报错问题,这些报错主要分为连接报错和执行报错两大类,下面将详细分析这两类报错及其解决办法:
连接报错
1、No suitable driver found for
可能原因:通过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,检查网络是否畅通,如果不通则解决网络问题。
查看端口是否正确,若不正确则修改为正确的端口。
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。
解决办法:检查所连接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连接和执行过程中的各种报错问题,希望这些信息能够为大家在实际开发中提供有价值的帮助。