我在允许空值的float类型列中插入NULL值时遇到问题。我得到了这个例外:
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).
我做错了什么?这段代码适用于nvarchar
或int
列的代码(在我的代码的其他部分),这是我第一次收到此错误。
提前谢谢。
答案 0 :(得分:4)
varbinary
将隐含地投放到nvarchar
和int
,但不投放float
。
请参见此处的图表:http://msdn.microsoft.com/en-gb/library/ms187928.aspx
我怀疑您不在nvarchar
和int
列中存储真正的数据库null
答案 1 :(得分: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方法使用标准基本类型(int,float,...)而不是对象。我搜索了一个解决方案,我(错误地)知道我需要使用ps.setNull(col_name, java.sql.Types.NULL)
。
为什么java.sql.Types.NULL
?我不知道,我认为这是在列中添加null的方法。
varbinary将隐式转换为nvarchar和int但不浮动 (......) 我怀疑你不在nvarchar和int列中存储真正的数据库null
所以我认为在内部,我的连接创建 varbinary NULL 的可能性,并且在尝试将其转换为Float类型时出现异常,根据gbn引用的图表不支持。然后我尝试指定java.sql.Types.FLOAT
类型并且它有效。
我希望这种解释可以帮助其他类似问题的用户。感谢 gbn 为我提供了提示。