首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
用db+record模式查询oracle的DATE不显示时分秒
老八
2016-09-29 13:51
如题,查出来的时间只有日期,没有时分秒,怎么破
项目:
JFinal
1
评论区
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;
回复
发送
我要反馈
热门反馈
扫码入社