[英]Does JDBC driver do automatic type casting for Postgres
我的問題基於我所做的觀察,但找不到答案。
在我的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
評論說,你為什么雙打存儲為文本?
性能與此無關。 與駕駛員實際所做的事情(即讀取和寫入數據)相比,進行轉換是滄海一粟。
JDBC規范規定的默認轉換可以在http://download.oracle.com/otn-pub/jcp/jdbc-4_3-mrel3-eval-spec/jdbc4.3-fr末尾的附錄B.6
中找到。 -spec.pdf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.