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

时间:2018-05-18 10:02:40

标签: java postgresql jdbc

我的问题是基于我做出的一个观察结果而无法找到答案。

在我的java代码中,我使用普通的statement.setDouble(number)在表中插入了一个类型为“Double”的值,并使用普通的resultSet.getDouble();

检索相同的值

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

如何插入和检索值? Postgres /司机转换它吗?由于数据类型不匹配,不应该抛出错误吗?

如果Postgres / driver是自动播放的,它会如何影响性能? 使用Postgres 9.4

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

1 个答案:

答案 0 :(得分:5)

是的,司机正在进行转换。在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所述,为什么 您将双打存储为文字?

性能与此无关。与驾驶员真正做的事情(即读取和写入数据)相比,进行转换是海洋中的一个下降。

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