解决Java中时间错误的错误格式?

时间:2010-08-16 13:06:56

标签: java mysql time

我正在使用java在mysql中提取表中时间列的值。

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

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:48:49'在第2列。

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

如果ResultSet实现完成的转换不适用于负时间值,那么您仍然可以将该值读取为String并实现自定义方法将String转换为Date(反之亦然):

  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

}

答案 1 :(得分:1)

正如您在previous question中所回答的那样,您需要将其存储和处理为秒,存储为有符号整数

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

答案 2 :(得分:1)

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

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

此致 Saul Hidalgo。

答案 3 :(得分:0)

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

当您直接运行查询[select * from table of Hour(time)&lt; = 32]时,它不会返回错误吗?我想错误是在where子句[Hour(time)&lt; = 32]

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

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