2010-08-16 68 views
3

我正在使用java来提取mysql中表中时间列的值。在java中解决时间错误的错误格式?

下面的代码显示我发送的查询。

String query="select id,time from table where Hour(time)<=32 "; 
ResultSet res = stmt.executeQuery(query); 
while (res.next()) { 
    String id = res.getString(1); 
    Time tc = res.getTime("time"); 
    System.out.println(tc); 
} 

时间值可以是负值(-56:00:00的意思,我们超越了一定的延时 的问题是,我得到:java.sql.SQLException:java.sql.SQLException: Bad format的时间“-05:49:48”在列2.

感谢您的帮助。

+1

列[时间]的类型是什么? – 2010-08-16 13:37:03

回答

1

正如你的previous question回答你需要存储和处理它作为有符号整数存储秒。

时间类型不能为负数。您也无法对varchar/string进行数学运算,并按照Andreas_D的建议将其推回到可行的格式,这只会增加不必要的开销。有符号的整数实际上是您可以用于此的最佳数据类型。使用PreparedStatement#setInt()来存储它并使用ResultSet#getInt()来获取它。

+0

完全同意'不必要的开销':) – 2010-08-16 15:14:06

2

如果由ResultSet实现完成的转换不会负时间值的工作,那么你仍然可以读取值作为字符串并实现自定义的方法来将字符串转换为一个日期(反之亦然):

String query="select * from table where Hour(time)<=32 "; 
    ResultSet res = stmt.executeQuery(query); 
    while (res.next()) { 
    String id = res.getString(1); 
    Time tc = convertToDate(res.getString("time")); 
    System.out.println(tc); 
    } 

    // .... 

} 

private Time convertToDate(String s) { 
    // implement magic here 

} 
0

我认为问题出在查询本身上。

当你直接运行查询[select * from table where hour(time)< = 32]它不会返回错误吗?我想错误是在where子句[小时(时间)< = 32]

结果集没有任何有关where子句的信息。它只是返回所有的列。

你需要检查列返回来检查你是否没有返回一些奇怪的类型。

1

也许这个答案太晚了。但是你可以解决它只是将字符串连接到你想要的字段。 我的意思是:

select id,concat(time,'') from table where Hour(time)<=32

问候 索尔伊达尔戈。

+0

他遇到的问题是该字段无法转换为Java'Time'对象 - 如何向它添加空字符串有帮助? – Tim 2012-03-11 07:04:18