JDBC 驱动程序如何处理日期类型?
How date types are handled by the JDBC driver?
在使用日期类型(主要是 timestampt / timestamptz)遇到一些问题后,我重新意识到,我不了解基础知识。
official JDBC driver 如何处理日期类型?
实际发送到数据库的是什么?
我假设,如果指定为额外参数,日期类型将使用系统区域设置或给定区域设置转换为文本表示形式。 JDBC 查询的结果应该与我使用 PSQL 登录并测试将它们粘贴为文本的查询时得到的结果相同。
JDBC 驱动程序如何处理这些值?我想大多数问题都是由于不知道那部分造成的。我想我很清楚 Java 如何处理日期,以及 PostgreSQL 如何处理日期。问题是 JDBC 它们之间的黑框。
文档 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() 将日期时间转换为字符串。
在使用日期类型(主要是 timestampt / timestamptz)遇到一些问题后,我重新意识到,我不了解基础知识。
official JDBC driver 如何处理日期类型?
实际发送到数据库的是什么?
我假设,如果指定为额外参数,日期类型将使用系统区域设置或给定区域设置转换为文本表示形式。 JDBC 查询的结果应该与我使用 PSQL 登录并测试将它们粘贴为文本的查询时得到的结果相同。
JDBC 驱动程序如何处理这些值?我想大多数问题都是由于不知道那部分造成的。我想我很清楚 Java 如何处理日期,以及 PostgreSQL 如何处理日期。问题是 JDBC 它们之间的黑框。
文档 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() 将日期时间转换为字符串。