Jfinal的TIMEDIFF问题

进击的代码 发布于 2013/11/11 17:24
阅读 421
收藏 0

@JFinal 你好,想跟你请教个问题:我的工具需要使用TIMEDIFF来计算时间差,然后我测试的时候发现总是报错

List<Record> list  = Db.find("select TIMEDIFF('2013-08-07 06:22:01','2013-08-07 05:22:01') as date_used  from dual");

这样是可以成功的,但是,如果把前面的时间改成:

List<Record> list  = Db.find("select TIMEDIFF('2013-08-09 06:22:01','2013-08-07 05:22:01') as date_used  from dual");
就会报错:

com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: Illegal hour value '49' for java.sql.Time type in value '49:00:00.
at com.jfinal.plugin.activerecord.Db.find(Db.java:361)
at com.jfinal.plugin.activerecord.Db.find(Db.java:372)

仔细一看,其实TIMEDIFF计算结果是正确的,但是把转换成Time格式了.......

请教下这是啥问题呐?@缪斯的情人


加载中
0
JFinal
JFinal

引用来自“进击的代码”的答案

引用来自“南湖船老大”的答案

引用来自“进击的代码”的答案

引用来自“南湖船老大”的答案

那你record里就应该用一个字符串类型来对应 date_used字段了
date_used  这个是sql查询语句里面的别名,我的查询语句你在mysql查询工具里面是没问题的,但是一到Jfinal查询就会被强制转换成time类型并报错
那就是JDBC转换的问题了,想办法避免这种转换
嗯,有可能,因为是JFINAL框架里面做的转换,回头我看看他源码是咋处理的
这种情况,可以直接 getConnection,再使用 JDBC 得到结果,看看 jdbc 是否也出错
1
南湖船老大
南湖船老大
那你record里就应该用一个字符串类型来对应 date_used字段了
1
南湖船老大
南湖船老大

引用来自“进击的代码”的答案

引用来自“南湖船老大”的答案

那你record里就应该用一个字符串类型来对应 date_used字段了
date_used  这个是sql查询语句里面的别名,我的查询语句你在mysql查询工具里面是没问题的,但是一到Jfinal查询就会被强制转换成time类型并报错
那就是JDBC转换的问题了,想办法避免这种转换
0
进击的代码
进击的代码

引用来自“南湖船老大”的答案

那你record里就应该用一个字符串类型来对应 date_used字段了
date_used  这个是sql查询语句里面的别名,我的查询语句你在mysql查询工具里面是没问题的,但是一到Jfinal查询就会被强制转换成time类型并报错
0
进击的代码
进击的代码

引用来自“南湖船老大”的答案

引用来自“进击的代码”的答案

引用来自“南湖船老大”的答案

那你record里就应该用一个字符串类型来对应 date_used字段了
date_used  这个是sql查询语句里面的别名,我的查询语句你在mysql查询工具里面是没问题的,但是一到Jfinal查询就会被强制转换成time类型并报错
那就是JDBC转换的问题了,想办法避免这种转换
嗯,有可能,因为是JFINAL框架里面做的转换,回头我看看他源码是咋处理的
0
进击的代码
进击的代码

引用来自“JFinal”的答案

引用来自“进击的代码”的答案

引用来自“南湖船老大”的答案

引用来自“进击的代码”的答案

引用来自“南湖船老大”的答案

那你record里就应该用一个字符串类型来对应 date_used字段了
date_used  这个是sql查询语句里面的别名,我的查询语句你在mysql查询工具里面是没问题的,但是一到Jfinal查询就会被强制转换成time类型并报错
那就是JDBC转换的问题了,想办法避免这种转换
嗯,有可能,因为是JFINAL框架里面做的转换,回头我看看他源码是咋处理的
这种情况,可以直接 getConnection,再使用 JDBC 得到结果,看看 jdbc 是否也出错

高手啊~~我测试代码如下:

ResultSet result = DbKit.getConnection().prepareCall("select TIMEDIFF('2013-12-09 06:22:01','2013-08-07 05:22:01')  from dual").executeQuery();

这样不会报错,但是一旦我去读取值的时候就会报错,还是被转换成了Time类型,

while (result.next()) {
System.out.println("current is" + result.getObject(1));
}

试了最新的5.1.27 JDBC驱动也是有这问题,看来是我怪错JFINAL了~~

0
进击的代码
进击的代码

怎么搞都有问题,网上搜索了下没人遇到过,奇怪了,不过想到解决办法了,用CONCAT(TIMEDIFF(END,START),‘’)来强制给他转换成字符串格式就可以正常使用了

@Jfinal @南湖船老大 谢谢两位~

返回顶部
顶部