用db+record模式查询oracle的DATE不显示时分秒

如题,查出来的时间只有日期,没有时分秒,怎么破

评论区

happyboy

2016-09-29 15:08

最好说的详细一些,比如贴一下你的关键代码。

老八

2016-09-29 16:11

@happyboy Db.findFirst("select * from table"),如果table里面有date类型的字段,值为2016-09-18 15:00:00,但是查出来的结果却是2016-09-18,后面的时分秒不见了

JFinal

2016-09-29 16:30

@老八 在 com.jfinal.plugin.activerecord.RecordBuilder.java 中设置一个断点,单步调试一下看得到的值是什么,类型是什么,这个问题很诡异,以前没人反馈过,有情况再来反馈一下

老八

2016-09-29 17:36

@JFinal 你说的是recordbuilder组装结果集吧,我debug跟到日期那个字段,类型是日期,但是值就是没有时分秒

JFinal

2016-09-29 17:40

@老八 对,就是说的这个组装结果集的代码,这个地方出来的数据是从数据库那边刚刚过来的,所以可以确保没经过什么干扰,如果这里就出问题了,那可能是 jdbc 驱动的问题,换个驱动试试

老八

2016-09-30 08:40

@JFinal 如您所说,换了个驱动,显示正常,以前公司的驱动都是针对jdk1.5的,现在用jfinal后改为jdk1.6了,所以出现了上述问题,非常感谢@JFinal的支持

happyboy

2016-09-30 09:08

@老八 话说你这么写Db.findFirst("select * from table")不会报错吗?你查询的是一个对象,但是你的语句明显是查一个list

老八

2016-09-30 10:29

@happyboy 不会的,方法是从结果集中取出第一条数据

JFinal

2016-09-30 11:02

@老八 感谢回来分享

happyboy

2016-09-30 11:33

@老八 我在之前使用中这么写都会报错的,而且这个错让我刻骨铭心。但是刚才看了下源码的确是取第一条。

happyboy

2016-09-30 14:02

@老八 刚才试了一下的确不会报错了,但是个人还是建议对于这种查询对象的需求,最好还是通过sql确保只能查出一条数据来,否则有可能出现这种情况,你先查询出了1000条数据(甚至更多),然后findFirst方法帮你取出第一条。有点得不偿失。

JFinal

2016-09-30 14:35

@happyboy 在 model.findFirst 的 API 文档中有相关说明,此外 jfinal 2.3 会考虑自动化添加 limit 1

happyboy

2016-09-30 20:06

@JFinal 自动化添加 limit 1感觉没有必要,程序不好判断,因为有些sql虽然没有加limit 1之类的语句,但是有可能是通过主键查询的数据,其实已经能保证查询出1条来,当然在加上limit 1也没啥影响。对于复杂的sql,感觉不好加,从最外层包一层sql其实意义不大,并不能提高性能,要想提高性能只能从最里层的sql下手,尤其像oracel那样的写法。其实mybatis对于对象查询好像也是让用户自己去控制保证查出一条来,如果查出集合也会报错。当然,这是从我个人水平角度出发的,波总应该有更高明的手段吧,^_^。

JFinal

2016-09-30 20:23

@happyboy 这个不同的数据库要做出不同的处理,先处理 mysql,判断有没有 limit ,有则不处理,无则在末尾添加 limit 1。当然,如果出了问题,用户可以通过扩展 MysqlDialect 来改变行为

IT技术成就梦想

2016-10-05 18:09

这个不是jfinal的问题,oracle输出时间,最好自己格式化输出。
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;