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

Vip*_*non 0 java postgresql jdbc

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

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

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

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

如果Postgres/driver是自动转换的话,它会如何影响性能呢?使用Postgres 9.4

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

Kay*_*man 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
}
Run Code Online (Sandbox Code Playgroud)

规范声明应该进行这样的转换,因此它根据规范工作.你是否应该依靠这些转换是一个不同的问题,如a_horse_with_no_name评论,为什么你双打存储为文本?

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

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