【问题标题】:How date types are handled by the JDBC driver?JDBC 驱动程序如何处理日期类型?
【发布时间】:2021-08-28 11:11:20
【问题描述】:

在使用日期类型(主要是 timestampt / timestamptz)遇到一些问题后,我意识到我不知道基础知识。

official JDBC driver如何处理日期类型?

实际发送到数据库的是什么?

我假设 Date 类型转换为文本表示,使用系统语言环境或给定语言环境,如果指定为额外参数。 JDBC 查询的结果应该与我使用 PSQL 登录并测试将它们粘贴为文本的查询时得到的结果相同。

JDBC 驱动程序如何处理这些值?我想大多数问题是由于不知道那部分造成的。我想我很清楚 Java 如何处理日期,以及 PostgreSQL 如何处理日期。问题是它们之间的 JDBC 黑盒。

【问题讨论】:

  • 驱动是开源的。你看过来源吗?

标签: java postgresql datetime jdbc


【解决方案1】:

文档Table 5.1 中提供了 JSR 310 类型到 SQL 类型的映射。

查看PostgreSQL JDBC DriverPgPreparedStatement.setObject()方法我们可以看到每个Java类型都用于设置时间戳,例如:

case Types.TIMESTAMP_WITH_TIMEZONE:
  if (in instanceof java.time.OffsetDateTime) {
    setTimestamp(parameterIndex, (java.time.OffsetDateTime) in);

在内部调用TimestampUtils.toString(),它将日期时间转换为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2011-12-14
    • 2017-12-07
    • 1970-01-01
    相关资源
    最近更新 更多