SQLServer類型與Java類型轉換問題解決

來源:互聯網
上載者:User

標籤:

  ResultSet 介面提供用於從當前行擷取列值的擷取 方法(getBoolean、getLong 等)。可以使用列的索引編號或列的名稱擷取值。一般情況下,使用列索引較為高效。列從 1 開始編號。為了獲得最大的可移植性,應該按從左至右的順序讀取每行中的結果集列,每列只能讀取一次。
對於擷取方法,JDBC 驅動程式嘗試將底層資料轉換為在擷取方法中指定的 Java 類型,並返回適當的 Java 值。JDBC 規範有一個表,顯示允許的從 SQL 類型到 ResultSet 擷取方法所使用的 Java 類型的映射關係。

SQL Server 類型

JDBC 類型 (java.sql.類型)

Java 語言類型

bigint

BIGINT

long

timestamp

binary

BINARY

byte[]

bit

BIT

Boolean

charnchar

CHAR

String

decimal

money

smallmoney

DECIMAL

java.math.BigDecimal

float

DOUBLE

double

int

INTEGER

int

image

LONGVARBINARY

byte[]

text

ntext

LONGVARCHAR

String

numeric

NUMERIC

java.math.BigDecimal

real

REAL

float

smallint

tinyint

SMALLINT

short

datetime

smalldatetime

TIMESTAMP

java.sql.Timestamp

varbinary

VARBINARY

byte[]

varchar

nvarchar

uniqueidentifier

VARCHAR

String

注意: JDBC 驅動程式目前不支援 SQL Server sqlvariant 資料類型。如果使用查詢從包含 sqlvariant 資料類型列的表中檢索資料,則會發生異常。

Getter 方法轉換

基於 SQL Server 2005 的資料類型,以表包含 SQLServerResultSet 類的 get<Type> 方法的 JDBC 驅動程式轉換圖,以及 SQLServerCallableStatement 類的 get<Type> 方法支援的轉換。

                       

JDBC 驅動程式的 getter 方法支援三種基本的轉換類別:

  • Non-Lossy (x) :在 getter 類型等於或小於基礎伺服器類型的情況下執行轉換。例如,對基礎伺服器的十進位數列調用 getBigDecimal 時,無需進行轉換。
  • Converted (y) :從數字伺服器類型到 Java 語言類型的轉換,此時的轉換為常規轉換,並遵循 Java 語言轉換規則。對於這些轉換,總是直接截取有效位元(從不四捨五入),而溢出則按目標類型模數處理,以較小者為準。例如,對包含“1.9999”的基礎十進位數列調用 getInt 將返回“1”;如果基礎十進位數值為“3000000000”,則 int 值將溢出為“-1294967296”。
  • Data Dependent (z) :從基礎字元類型轉換到數字類型時,要求字元類型所包含的值可轉換成數字類型。不執行其他轉換。如果值對於 getter 類型過大,則該值無效。例如,如果對包含“53”的 varchar(50) 列調用 getInt ,則該值作為 int 返回;但如果基礎值為“xyz”或“3000000000”,則發生錯誤。

(摘自微軟的sqljdbc協助文檔)

1. ResultSet中對於getDouble,getFloat,getInt方法由於返回的是基本類型資料,所以null變為了0(如果值為 SQL NULL ,則傳回值為 0 )。這給我們帶來了不少麻煩。為了避免這個問題需要藉助ResultSet#wasNull()方法

2. ResultSet#getDate。以前沒注意過這個傢伙返回的類型是java.sql.Date,探索資料庫欄位類型為datetime時返回來的資料只有年月日,用 ResultSet#getTimestamp就沒問題,鬱悶,到現在還不知道為什麼。

3. 相關資源:

http://java.sun.com/products/jdbc/overview.html

http://msdn.microsoft.com/zh-cn/data/aa937724(en-us).aspx

 

SQLServer類型與Java類型轉換問題解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.