有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    Time.toString()hh:mm:ss格式返回值,这意味着任何毫秒都将被丢弃。毫秒不会从对象中消失,但默认情况下它们不可见。getTime()方法返回对象的最准确状态,这可以从下面的代码中观察到

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

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

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