簡體   English   中英

JDBC驅動程序是否對Postgres執行自動類型轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM