2011-02-18 115 views
1

我已經通過這個com了,我一直沒能找到正確的文檔。當值爲null時,MySQL SMALLINT列在java.lang.Short中返回0

基本上我有一個MySQL表,用於每年舉辦值的列的類型是SMALLINT列可以爲空列,每當我檢索使用方法resultset.getShort("year");我得到一個值(NULL0而不是預期的null值。

年值是一個bean的成員,這意味着我使用訪問器方法,所以當我使用CallableStatement對象,並相應地設置了佔位符時,我得到一個NullPointerException我知道這應該是預期的,但有些情況下,當我需要明確的值設置爲null如當不提供一年或用戶輸入字母或一個字符串,它是不是一個「年」

這是默認的行爲與其他包裝類原語確實允許null值。

什麼是正確的類型映射到SMALLINT或者我應該將列更改爲INT

回答

1

我不知道該庫(或Java,對於這個問題),但我想我找到了代碼here並偷看了一下。看起來getShort總是返回一個short,並且從不爲null,但是您可以使用wasNull來檢查最後一次retreived值是否實際爲null。

+0

是的,似乎是這樣,爲什麼會是這種行爲的原因? – Triztian 2011-02-18 23:39:03

+0

我認爲該圖書館的創建者認爲它很方便。 getShort實際上是getString的封裝(如果字段爲空,它將返回null)。當字段爲空或「'」時,getSHort返回0,而且如果發生空指針異常。所有這些檢查你不需要做的各種例外。圖書館爲你照顧這件事。所有你需要做的就是在(不太可能)默認值爲0的情況下調用這個額外的函數。 – GolezTrol 2011-02-18 23:48:30

1

檢查JDBC文檔。 getShort()等當對應的數據庫列爲空時返回0。之後您需要致電wasNull()以檢查它是否真的爲空。

這是最破的一個 API EVER

0

-Dorg.apache.el.parser.COERCE_TO_ZERO=false添加到您的apache啓動配置中。