gpt4 book ai didi

java - JDBC 驱动程序是否为 Postgres 执行自动类型转换

转载 作者:行者123 更新时间:2023-11-29 14:06:16 25 4
gpt4 key购买 nike

我的问题是基于我所做的观察,但找不到答案。

在我的 java 代码中,我使用普通的 statement.setDouble(number) 将“Double”类型的值插入到表中,并使用普通的 resultSet.getDouble() 检索相同的值;

然而,在上述表格中,该特定列的类型为“文本”

如何插入和检索值? Postgres/驱动程序正在转换它吗?它不应该因为数据类型不匹配而抛出错误吗?

此外,如果 Postgres/驱动程序自动转换它,它对性能有何影响?使用 Postgres 9.4

所以这只是一个观察,更像是从试验中学习。我知道这绝对不是我会编写的标准代码。

最佳答案

是的,驱动程序正在进行转换。在 PGResultSet 类中,您可以找到用于转换的代码(如果列是文本,则调用此代码,对于二进制列,还有其他转换)。

public static double toDouble(String s) throws SQLException {
if (s != null) {
try {
s = s.trim();
return Double.parseDouble(s);
} catch (NumberFormatException e) {
throw new PSQLException(GT.tr("Bad value for type {0} : {1}", new Object[]{"double", s}),
PSQLState.NUMERIC_VALUE_OUT_OF_RANGE);
}
}
return 0; // SQL NULL
}

规范指出应该进行此类转换,因此它按照规范工作。您是否应该依赖这些转换是另一回事,正如 a_horse_with_no_name 评论的那样,您为什么将 double 存储为文本?

性能与此无关。与驱动程序真正做的事情(即读取和写入数据)相比,进行转换只是沧海一粟。

JDBC 规范规定的默认转换可以从附录 B.6 中找到 http://download.oracle.com/otn-pub/jcp/jdbc-4_3-mrel3-eval-spec/jdbc4.3-fr-spec.pdf

关于java - JDBC 驱动程序是否为 Postgres 执行自动类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50408782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com