之前程序是连接的oracle11G数据库,由于11G官方不再维护,很多客户升级到了oracle19C,
导致程序连接报错
我这边jdk为1.8 oracle jdbc驱动为
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14_g</artifactId>
<version>10.2.0.4.0</version>
</dependency>
报错信息为java.sql.SQLException: ORA-28040: 没有匹配的验证协议
有一种解决方式为远程到oracle服务器,修改oracle服务端配置文件,改为兼容oracle11版本。
但是这种不大推荐,数据库服务器不是我们可以随便去远程,修改的,好多系统可能用一个实例。
所以修改数据库服务器配置的做法很多地方不适用。
1.jdk8程序连接oracle19C数据库
解决方法为升级orace jdbc驱动
修改pom文件ojdbc依赖为
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
我们发现更新pom后 ojdbc8-19.3.0.0.jar依赖引入了很多jar,具体哪些可以从ojdbc8-19.3.0.0.pom看到,这些依赖都是不能排除的。排除了可能数据库能连接上 查询字段时缺少转换报错等
下面是我从oracle官方下载的jdk8 连接oracle19C 的jdbc驱动 jar集合,方便非maven结构项目使用。
2.jdk7连接oracle19C数据库
另外需要注意的是 如果数据库是oracle11G,jdk7,jdk8都是使用oracle14G驱动就行,而如果是oracle19C ,jdk7和jdk8的驱动不一样的。
jdk7的项目连接oracle19C数据库使用ojdbc7-12.1.0.2.jar驱动即可
对应的pom,注意是中央仓库的cn.easyproject包下,com.oracle下我好像没找到ojdbc7-12.1.0.2
<dependency>
<groupId>cn.easyproject</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2.0</version>
</dependency>
3.报错Caused by: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
我这边pom跟新后启动可以,但是sql报错提示上诉错误,提示少了orai18n.jar
我查看ojdbc8-19.3.0.0.jar的pom有这个依赖的..
查看依赖关系也没引入orai18n.jar
查到原因是ojdbc8-19.3.0.0.jar的pom引入orai18n.jar时增加了<optional>true</optional>
导致不会依赖传递,但是这个这个pom我这边又不好改动
解决方案是pom单独增加下该依赖,更新依赖,重启,sql执行成功
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>orai18n</artifactId>
<version>19.3.0.0</version>
<optional>true</optional>
</dependency>
后续又发现问题,maven clean mvn package打包时,orai18n.jar 没打包进去,项目引入该jar时也需要把<optional>true</optional>标签去掉,mvn package才会把该jar打包进去
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>orai18n</artifactId>
<version>19.3.0.0</version>
</dependency>