之前程序是连接的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>

4.最后附上jdbc驱动下载链接

jdk7_jdk8-oracle19C所需驱动.zip_jdk8的oracle驱动-互联网文档类资源-CSDN下载

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐