OJDBC连接错误:Got minus one from a r

2020-04-10  本文已影响0人  孤潭云影

网上列举的错误原因多数是说数据库连接数满、用户名密码错误或者用户被列入黑名单,也有建议更换OJDBC版本,但经过实际的测试,以上几种错误都会抛出对应的java.sql.SQLException,例如:

java.sql.SQLException: ORA-01017: invalid username/password; logon denied

经过debug和抓包,发现该错误实际上出现在创建tcp连接后,开始与oracle服务器通讯时,由于报文中Connect Data 错误,服务器主动关闭tcp连接所致。
其中比较常见的原因是由于PhysicalConnection.thinVsessionOsuser属性中包含特殊字符引起的,该属性默认会获取windows用户名,部分带有特殊字符的用户名在拼接到Connect Data会引起解析错误,例如我遇到的例子中,实际拼接的用户名为1)·,导致括号匹配错误:

Connect Data: (DESCRIPTION=(CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=1)·)))(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

解决方案为在添加如下代码:

static {
  System.setProperty("user.name","jdbcuser");
}
上一篇下一篇

猜你喜欢

热点阅读