问题说明
公司一个远古项目需要重构,生产的数据库项目比较久远,生成环境下的使用的Oracle数据库版本为9.2.0.4.0-64bit Production。而公司现在开发测试用的Oracle数据库版本已经到了 11.2.0.1.0-64bit Production。
所以,在本地对项目进行重构的时候,新搭建的项目框架使用的Oracle驱动版本为ojdbc7-11.2.0,具体maven依赖如下:
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>11.2.0</version>
</dependency>
在连接公司的测试数据库测试的时候,一切正常。等切换到生产环境的时候,通过日志发现,所有的数据库表中只要数据类型是varchar2类型的列,只要有值的,返回的结果均为空字符串""。而数据类型是varchar2类型的列,没值的,能正常返回null,date类型的也能正常返回日期的值。
即便是通过原生jdbc连接,取结果集(ResultSet),遍历结果集元数据(ResultSetMetaData)的每一列,依旧存在这个问题。
解决
最终,通过对比这个项目的旧版代码发现,旧代码的Oracle驱动版本为ojdbc6-11.2.0.1.0,然后再测试生产环境就没问题了。具体maven依赖如下:
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
这个版本的驱动在maven库中找不到的话,下载地址在这里
如果你觉的这篇文章对你有帮助,请点赞收藏。
另外,我有一个公众号,有兴趣的可以关注一下