服务器上报表的日期字段显示没有时分秒
同样的报表和数据库配置在服务器上展现和本地设计器下展现一个有时分秒,一个没有,如下图所示:
两者用的是同样的数据库驱动 jar(自带的 oracle11gjdbc.jar),报表使用的数据库也是一样的,报表的 jar 包和报表文件也都是一样的
为什么一个显示时分秒,一个不显示?怎么让服务器上显示时分秒?
排查解决过程:
经确认,数据库端查询是带有时分秒的,如下图所示:
做的下一步测试是:将报表数据集内建,查看转化后的类型是日期,如果手动改为日期时间,那么服务器上可以正常显示时分秒
所以下一步确认的是:客户数据库端使用的字段类型是:date
Oracle 自己的 oracle.sql.DATE 就对应日期类型,Oracle 自己的 oracle.sql.TIMESTAMP 对应日期时间类型。
在转换时,是不能将一种 oracle 的类型转换成多种报表类型的,因为数据库端到报表端必然会有一个类型的映射关系
所以服务器上如果要显示日期时间,需要用时间戳类型
所以让客户改数据库字段类型为时间戳测试
改为时间戳之后,本地设计器测试仍没有问题,服务器上出现新问题,如下图所示:
时间戳类型转为对应的标准日期时间的操作是用 oracle 自己 jdbc 提供的方法来搞的,所以这个问题优先去排查数据库驱动 jar 是否匹配
前面提到使用的是自带的 jar,不一定和客户版本匹配,所以去官网给客户下载了对应匹配的驱动 jar:ojdbc6.jar orai18n.jar ,然后放到对应目录下
对应 driver 改为:oracle.jdbc.OracleDriver
根据 oracle 官网说明,11 版本之后,driver 改用 oracle.jdbc.OracleDriver,11 版本之前用 oracle.jdbc.driver.OracleDriver
至此,问题全部解决。
需要注意:数据库驱动 jar 和版本的匹配以及字段类型的对应映射关系。
oracle 的驱动 jar 一定要从官网下载对应匹配的