JDBC(postgreSql)如何导出/导入java。无毫秒精度损失的sqlTime
我正在使用JDBC将数据从postgreSql数据库导出到文本文件。我需要将所有可能的类型导出/导入到字符串。除了java之外,大多数类型都可以完美地序列化。sqlTime。当我使用SQL NOW()创建时间和时间戳时,它会在我的数据库中创建记录:
time | timestamp
--------------------------------------------
13:17:03.121719 | 2017-10-13 13:17:03.121719
对象时间由JDBC映射到java中。sql。时间要写它,我只需使用:
String time = value.toString();
当我想把它从文本文件映射回java时。sql。时间和导入到我使用的数据库:
java.sql.Time.valueOf(value.toString());
它与java完美结合。sql。时间戳,但不适用于java。sql。时间导入数据库(使用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
所以我还是在失去精确度。有更好的方法吗
# 1 楼答案
Time.toString()
以hh:mm:ss
格式返回值,这意味着任何毫秒都将被丢弃。毫秒不会从对象中消失,但默认情况下它们不可见。getTime()
方法返回对象的最准确状态,这可以从下面的代码中观察到请注意,仍然只能获得毫秒精度
真正的问题是通过自己的代码以文本格式导出数据。除非有合理的理由,否则你根本不应该麻烦。您可以使用更简单、更准确的二进制转储,也可以使用任何其他现成的工具