我的问题是基于我做出的一个观察结果而无法找到答案。
在我的java代码中,我使用普通的statement.setDouble(number)在表中插入了一个类型为“Double”的值,并使用普通的resultSet.getDouble();
检索相同的值然而,在所述表格中,此特定列的类型为“文本”
如何插入和检索值? Postgres /司机转换它吗?由于数据类型不匹配,不应该抛出错误吗?
如果Postgres / driver是自动播放的,它会如何影响性能? 使用Postgres 9.4
所以这只是一个观察,更像是从试验中学习。我知道它绝对不是我写的标准代码。
答案 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