我正在使用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列。
感谢您的帮助。
答案 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子句的任何信息。它只返回所有列。
你需要检查列返回以检查你是否没有返回一些奇怪的类型。