在使用日期类型(主要是时间戳/时间戳)时遇到一些问题后,我意识到我不知道基础知识。
official JDBC driver 如何处理日期类型?
实际发送到数据库的内容是什么?
我假设,如果指定为额外参数,则使用系统语言环境或给定语言环境将日期类型转换为文本表示。 JDBC 查询的结果应该与我使用 PSQL 登录并测试将它们粘贴为文本时得到的结果相同。
JDBC 驱动程序如何处理这些值?我想大多数问题都是由于不知道那部分造成的。我想我非常了解 Java 如何处理日期,以及 PostgreSQL 如何处理日期。问题在于它们之间的JDBC黑匣子。
答案 0 :(得分:2)
文档 Table 5.1 中提供了 JSR 310 类型到 SQL 类型的映射。
检查 PostgreSQL JDBC Driver PgPreparedStatement.setObject() 方法我们可以看到每个 Java 类型都是用来设置时间戳的,例如:
case Types.TIMESTAMP_WITH_TIMEZONE:
if (in instanceof java.time.OffsetDateTime) {
setTimestamp(parameterIndex, (java.time.OffsetDateTime) in);
在内部调用 TimestampUtils.toString() 将日期时间转换为字符串。