我正在使用 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/