【问题标题】:Retrieving MySQL time in java在java中检索MySQL时间
【发布时间】:2013-10-17 22:05:54
【问题描述】:

我正在运行以下查询以获得两倍的时差

resultSet = statement.executeQuery("SELECT TIMEDIFF('14:03:55.256', '14:02:51.780') AS td");

MySQL 以这种格式给出时差

00:01:03.476

但两者 resultSet.getTime("td");resultSet.getObject("td");
返回00:01:03

根据文档getTime(String string)检索此ResultSet对象当前行中指定列的值作为Java编程语言中的java.sql.Time对象。

java.sql.Time对应SQL TIME并包含有关小时、分钟、秒和毫秒的信息。那为什么我得到00:01:03 而不是00:01:03:476

我基本上想要的是将00:01:03.476 存储到一个字符串中。有什么解决方法还是我做错了?

【问题讨论】:

  • 你试过resultSet.getString("td")吗?
  • @Stephan:是的,但它会抛出 java.sql.SQLException: Bad format for Time '00:01:03.476' in column 1

标签: java mysql time resultset


【解决方案1】:

如果您通过打印结果来验证结果,请注意java.sql.Time.toString() 仅返回格式为hh:mm:ss 的字符串

你真的应该使用rs.getTimestamp,它会返回一个java.sql.Timestamp

【讨论】:

  • 我正在通过System.out.println(resultSet.getTime("td"))resultSet.getTimestamp() 验证结果@throw java.sql.SQLException: Cannot convert value '00:01:03.476' from column 1 to TIMESTAMP.
  • 试试这个然后new Timestamp(resultSet.getTime("td").getTime())。请注意,通过将生成的时间对象包装在 println toString() 中,正在调用。
  • 它正在返回1970-01-01 00:01:03.0。问题是 resultSet.getTime("td") 本身返回 00:01:03 所以,getTime() 只是增加了 0 毫秒。
  • 如果是这种情况,那么您正在使用的驱动程序是 ResultSet.getTime() 的实现,它正在切断毫秒。
【解决方案2】:

尝试这样做:

String s = new SimpleDateFormat("HH.mm.ss.SSS").format(t.getTime());

其中tjava.sql.Time 类型的变量。

希望这能解决你的问题。

【讨论】:

  • 但是如果列值为NULL则不起作用,抛出空指针异常
  • @ParagJadhav 如果您的列接受空值,您必须在代码中处理空值。如果不希望出现空值并且您可以修改数据库,则将该列标记为非空值。
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
相关资源
最近更新 更多