SQLServerExeption尝试在列中插入NULL值

时间:2013-04-08 09:17:57

标签: java sql-server

我在允许空值的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).

我做错了什么?这段代码适用于nvarcharint列的代码(在我的代码的其他部分),这是我第一次收到此错误。

提前谢谢。

2 个答案:

答案 0 :(得分:4)

varbinary将隐含地投放到nvarcharint,但不投放float

请参见此处的图表:http://msdn.microsoft.com/en-gb/library/ms187928.aspx

我怀疑您nvarcharint列中存储真正的数据库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的方法。

然后gbn说:

  

varbinary将隐式转换为nvarchar和int但不浮动    (......)   我怀疑你在nvarchar和int列中存储真正的数据库null

所以我认为在内部,我的连接创建 varbinary NULL 的可能性,并且在尝试将其转换为Float类型时出现异常,根据gbn引用的图表不支持。然后我尝试指定java.sql.Types.FLOAT类型并且它有效。

我希望这种解释可以帮助其他类似问题的用户。感谢 gbn 为我提供了提示。