oracle连接出现nested exception is java.sql.SQLRecoverableException: IO 错误: Undefined Error,使用的是ojdbc8驱动

背景:

新入职一家公司,项目用了很多地方的oracle对接客户的数据库,以前我是没有用过。

并且对接的驱动是ojbdc68都在用,其他同事正常的很,就我不行

在连接的时候出现这个问题,这个问题其实还卡了我一天多时间,才入职就要出个开发任务,没时间来搞这个,所以中途下班时间搞搞,嗨呀,时间太赶了

网上的解决办法,完全解决不了(切换jdk位数)或者不能根治(直接降版本)

错误:

分析

有没有那么几种可能性呢?

1、是我自己还是所有人都是这样(首先排除,项目模板是大佬提供的,他那可以跑的起来,这个假设pass)

2、有没有可能是驱动倒入错误(其实最开始在mvnrepository库里找,是下不下来的,还得自己陪远程maven库,要么就是自己下驱动包,然后手动加到自己的maven本地库,我是直接copy大佬的maven库,有现成的,真爽!因为测了几次,maven仓库也切换了,说明确实不是这个的问题 pass掉)

3、网上评论都说是ojdbc版本问题和jdk问题(这个问题最像,我当时也以为我快成功了,结果....不过确实ojdbc6可以连接是真的,但是....已经好了的项目确实好多ojdbc8,这个不可能因为我的问题去改所有连接驱动,不现实,所以出现这个问题,网上的那几个解决方法基本解决不了,或者不能根治,问题原因其实都没有说明白)

4、我问了下公司大佬,大佬说会不会是idea版本问题或者是连接url问题,这个我用的确实低了点,2017版本....,不过后来测试不是这个问题,地址问题,这个也可以排除,不过最终答案靠点边,这个后面再说(这个其实也pass,因为都试过了)

5、没有5了,只有老老实实去跟错误代码一点一点找问题,说来也奇怪,上面标红代码那里,点进去之后,那个类没有691行,这就狠有意思...,这个是其一,之后去查资料发现数据库连接时有一个参数:

oracle.jdbc.v$session.osuser
底层代码取值代码为:System.getProperty("user.name")

然后尴尬的来了,我win10系统是中文名,其实看到这个参数的时候就想会不会是中文错误了,但是连接参数出现问题,我就在启动类加上了这个代码

System.setProperty("user.name", "英文名");  

启动,解决,问题原因就固定了。

ojdbc8不能很好的兼容中文,导致了这个连接问题。

处理

这里给两个解决方案:

1、直接把ojdbc6的包换个名字放过来,我用着是没啥问题,还可以(如果实在找不到方法可以试试,一切正常)

2、设置操作系统用户名为英文名或者在代码里面设置

System.setProperty("user.name", "英文名");  

也可以设置项目全局变量,启动时加上-Duser.name="英文名"

linu倒是不太会出现这个问题,那玩意基本都是英文

吃一堑长一智,真的是,程序员们真的,少用中文!这问题。。。。

 

 

 

 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值