java - JDBC(postgreSql)如何导出/导入java.sqlTime而没有毫秒精度损失

标签 java postgresql jdbc time

我正在使用 JDBC 将数据从 postgreSql 数据库导出到文本文件。我需要将所有可能的类型导出/导入到字符串。除了 java.sqlTime 之外,大多数类型都可以完美序列化。当我使用 SQL NOW() 创建时间和时间戳时,它会在我的数据库上创建记录:

time            | timestamp
--------------------------------------------
13:17:03.121719 | 2017-10-13 13:17:03.121719

对象时间由 JDBC 映射到 java.sql.Time。为了编写它,我只需使用:

String time = value.toString();

当我想将它从文本文件映射回 java.sql.Time 并导入到数据库时,我使用:

java.sql.Time.valueOf(value.toString());

它可以与 java.sql.TimeStamp 完美配合,但不能与 java.sql.Time 配合使用。导入到数据库后(使用preparedStatement.setTime())我得到:

13:17:03 而不是 13:17:03.121719

我也尝试像这样导出:

String time = String.valueOf(value.getTime());

并导入:

new java.sql.Time(Long.parseLong(value.toString()));

结果更好,但我得到: 13:17:03.121 而不是 13:17:03.121719

所以我仍然失去毫秒精度。有没有更好的办法呢?

最佳答案

Time.toString() 返回 hh:mm:ss 格式的值,这意味着任何毫秒都将被丢弃。对象中并不缺少毫秒,但默认情况下它们是不可见的。 getTime() 方法返回对象最准确的状态,如以下代码所示

Time t = new Time(System.currentTimeMillis()+1345);
System.out.println(t);
System.out.println(new Timestamp(t.getTime()));

请注意,您仍然只能获得毫秒精度。

您真正的问题是通过您自己的代码以文本格式导出数据。除非有正当理由,否则你根本不应该打扰。您可以进行更简单、更准确的二进制转储,或者使用任何其他现成的工具。

关于java - JDBC(postgreSql)如何导出/导入java.sqlTime而没有毫秒精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46729060/

相关文章:

postgresql - 在 Postgres 中设置整数列的长度

jdbc - Apache Camel JDBC 轮询和幂等性

java - java EE 中的 Junit 测试 (JPA)

Java 程序 - 在 Eclipse 中工作,但在 JAR 中不工作 - FreeTTS

java - Spring WebContent 资源 - ServletContext 外部访问

java - c3p0-0.9.5.2 语句展开导致抽象方法错误

java - 使用 JDBC 连接到 MySQL DB 的问题

java - 按日期比较 DateTime 对象

sql - 按固定记录数分区

c# - 为什么我收到错误 : An operation is already in progress