2

我无法在允许空值的浮点型列中插入空值。我得到了这个例外:

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列,这是我第一次收到此错误。

先感谢您。

4

2 回答 2

4

varbinary将隐式转换为nvarcharandint但不是float

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

我怀疑您没有nvarchar在andint列中存储真正的数据库空值

于 2013-04-08T09:20:39.460 回答
3

感谢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 但不是 float (...) 我怀疑您没有在 nvarchar 和 int 列中存储真正的数据库 null

So I considered that possibility that, internally, my connection was creating a varbinary NULL and the exception appeared when trying to convert it to a Float type, not supported according to the graph referred by gbn. Then I tried to specify a java.sql.Types.FLOAT type and it worked.

I hope this explanation would help other users with similar issues. Thank you gbn for providing me the hints.

于 2013-04-09T10:39:59.623 回答