2013-04-08 119 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

相关问题