2013-04-08 43 views
2

我無法在允許空值的float型列中插入NULL值。我得到這個例外:嘗試在列中插入NULL值的SQLServerExeption

SQLServerException: Operand type clash: varbinary is incompatible with float 
    at (...) 

我使用PreparedStatement來查詢數據庫。我用來設置這個特定值的代碼段是:

Float floatValue; 

(...) 

if((this.floatValue != null)&&(this.floatValue != 0)) ps.setFloat(col_pos,this.floatValue); 
else ps.setNull(col_pos,java.sql.Types.NULL); 

(...) int result = ps.executeUpdate(); //Here is when i get the error, when it tries to insert/update the table). 

我在做什麼錯?這段代碼適用於nvarcharint列,這是我第一次得到這個錯誤。

預先感謝您。

+0

你的Float列是否接受null? – 2013-04-08 09:18:32

+0

當然可以。我完全確定。如果我手動查詢語句(使用Management Studio),它允許我插入一個NULL值。 – jmrodrigg 2013-04-08 09:19:56

+0

數據庫中列的數據類型是什麼? – codeMan 2013-04-08 09:20:35

回答

1

由於GBN的回答,我意識到什麼是真正的當我在我的代碼中使用ps.setNull(col_name, java.sql.Types.NULL)時發生。我錯了,我需要指定我插入NULL值的列的類型。因此,解決辦法是:

ps.setNull(col_name, java.sql.Types.FLOAT); 

當我需要設置在我第一次使用ps.setInt(col_name,null)一列空值,但隨着setter方法使用標準的基本類型(整數,浮點它返回一個例外,... )而不是對象。我搜索了一個解決方案,我(錯誤地)瞭解到我需要使用ps.setNull(col_name, java.sql.Types.NULL)

爲什麼java.sql.Types.NULL?我不知道,我認爲這是在列中添加空值的方式。

然後GBN的說:

VARBINARY會投隱含爲nvarchar和int而不是浮 (...) 我懷疑你是不是存儲在爲nvarchar和INT一個真正的數據庫空列

所以我認爲,在內部,我的連接被創建VARBINARY NULL和電子這種可能性xception在嘗試將其轉換爲浮點類型時出現,不支持根據gbn引用的圖形。然後我試圖指定一個java.sql.Types.FLOAT類型,它的工作。

我希望這個解釋能夠幫助其他有類似問題的用戶。謝謝gbn爲我提供提示。

4

varbinary將隱含地投射到nvarcharint而不是float

在這裏看到的圖形:http://msdn.microsoft.com/en-gb/library/ms187928.aspx

我懷疑你是存儲在nvarcharint列一個真正的數據庫空

+0

我不確定我是否理解你......所以你說的是,當我使用'ps.setNull'時,代碼在內部創建'varbinary',它試圖把它放在一個'浮動'列失敗? 那麼,我怎樣才能在'float'列插入NULL值呢?有什麼辦法嗎? – jmrodrigg 2013-04-08 09:33:05

+0

@jmrodrigg:是的,有一個varbinary的地方。但是,我不知道如何解決這個問題。我不使用Java – gbn 2013-04-08 09:43:34